javascript - React + Express:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-origin
问题描述
我正在运行一个节点/express 服务器,它当前是我的后端并托管 API。我可以通过邮递员访问端口 123 上的 API。我正在 React 中创建我的前端并尝试访问 API 以获取一些数据。但是,当我尝试导航到该页面时,我在控制台中收到以下错误。
Access to XMLHttpRequest at 'http://abc:123/test' from origin 'http://abc:456' has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.
createError.js:17 Uncaught (in promise) Error: Network Error
at createError (createError.js:17)
at XMLHttpRequest.handleError (xhr.js:80)
我已将以下内容添加到我的服务器但仍然收到错误,关于我可能遗漏的任何建议?
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Credentials", "true");
res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS");
res.header("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization");
next();
})
在我的 React 代码中,我使用 axios 向 API 发出 post 请求
axios.post("http://abc:123/test", {
'data': '12346'
}).then(response => {
console.log(response);
})
解决方案
飞行前请求是一个 OPTIONS 请求,您只回答 POST 请求。添加
app.post(/*...*/);
app.options("http://abc:123/test", (req, res) =>
res.status(200).send("Feel free to send the real request now :)")
);
或者添加类似 npm cors 包的东西,它也可以为你做。
推荐阅读
- sparql - SPARQL - 从相关变量的结果中排除一个变量
- r - Ubuntu 14.04 配置:错误:“找不到 libxml”
- javascript - 表单提交后如何使用php在页面中跳转
- swift - PFQuery 返回空白查询
- android - RecyclerView MemoryLeak - 泄漏金丝雀
- typescript - 构建包时,我的 /src 文件夹中必须有一个 package.json 文件吗?
- tfs - 将 TFS 构建定义 (CI) 链接到 TFS 拉取请求
- transactions - 在脚本文件中写入事务
- java - 具有初始值的 JPA GeneratedType 序列
- python - 多个屏幕截图在 Python 中不起作用