【发布时间】:2021-09-04 00:50:44
【问题描述】:
我正在使用以下代码从我的 React 应用程序发送一个发布请求。
// https://react-app.com
await fetch('https://node-backend-on-aws-lambda-api.com/stage/resource', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
mode: 'cors',
body: JSON.stringify(jsonData),
})
在服务器端,我使用cors node.js package 启用了cors,如下所示:
// https://node-backend-on-aws-lambda-api.com/stage/resource
var cors = require('cors')
...
var app = express();
app.use(cors());
但是当我尝试向我的节点后端发送一个发布请求时,我仍然得到这个响应?!
Access to fetch at 'https://node-backend-on-aws-lambda-api.com/stage/resource'
from origin 'https://react-app.com'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested
resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the
resource with CORS disabled.
通过直接从浏览器访问服务器 url https://node-backend-on-aws-lambda-api.com/stage/resource
我看到正确的标题已经到位(见图)
这个图片是我直接访问node后端时的headers
这张图片是我从我的 React 应用获得的标题
我还需要做什么?
【问题讨论】:
-
您的节点后端是否正确响应了预检请求 (developer.mozilla.org/en-US/docs/Glossary/Preflight_request)?
-
我想是的,我怎么确定呢?考虑到服务器头包含
access-control-allow-methods和相关方法,是不是就不能假设preflight没问题? -
预检是一个
OPTIONS请求。您的节点后端可能根本不会威胁 OPTIONS 请求。在浏览器的开发工具面板中查看网络标签。 -
尝试将
app.options('/stage/resource', cors())添加到您的快递服务器。 -
嗨 Andor,我添加了那行代码,但仍然出现 CORS 错误。
标签: node.js reactjs express cors