如何从 Nodejs 服务器启用 CORS
How to Enable CORS from Nodejs server
我正在使用 React 将数据发送到我的 API。我发出的每个 POST 请求都会给我一个 OPTIONS 请求,我需要解决这个问题。我想我可能需要做一些预检结构,但在阅读之后我仍然不知道如何实现它。
目前我正连接到我的API...
fetch('http://localhost:8080/login', {
method: 'POST',
mode:'cors',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: this.state.username,
password: this.state.password
})
});
这叫做onSubmit
。我正在向我的 POST 请求发送一些数据,所以我假设我需要那些 headers.
现在在我的节点 js 服务器中 API 我有以下处理程序...
var responseHeaders = {
"access-control-allow-origin": "*",
"access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
"access-control-allow-headers": "content-type, accept",
"access-control-max-age": 10,
"Content-Type": "application/json"
};
app.post('/login', function(req, res, next) {
if (req.method == "OPTIONS") {
res.writeHead(statusCode, responseHeaders);
res.end();
}
console.log("hello");
...
然而,这不起作用,当我发出请求时,我得到...
OPTIONS /login 200 8.570 ms - 4
如果我删除 headers,POST 可以工作,但数据(用户名、密码)不会通过。
如何绕过这个 OPTIONS 问题?
浏览器向服务器发送预检选项请求以检查服务器是否启用了 CORS。要在服务器端启用 cors,请将其添加到您的服务器代码中
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.post
顾名思义,针对POST
请求。 OPTIONS
请求不会路由到该方法。
您需要像这样编写一个特定于 options 的处理程序,
app.options("*",function(req,res,next){
res.header("Access-Control-Allow-Origin", req.get("Origin")||"*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
//other headers here
res.status(200).end();
});
我正在使用 React 将数据发送到我的 API。我发出的每个 POST 请求都会给我一个 OPTIONS 请求,我需要解决这个问题。我想我可能需要做一些预检结构,但在阅读之后我仍然不知道如何实现它。
目前我正连接到我的API...
fetch('http://localhost:8080/login', {
method: 'POST',
mode:'cors',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: this.state.username,
password: this.state.password
})
});
这叫做onSubmit
。我正在向我的 POST 请求发送一些数据,所以我假设我需要那些 headers.
现在在我的节点 js 服务器中 API 我有以下处理程序...
var responseHeaders = {
"access-control-allow-origin": "*",
"access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
"access-control-allow-headers": "content-type, accept",
"access-control-max-age": 10,
"Content-Type": "application/json"
};
app.post('/login', function(req, res, next) {
if (req.method == "OPTIONS") {
res.writeHead(statusCode, responseHeaders);
res.end();
}
console.log("hello");
...
然而,这不起作用,当我发出请求时,我得到...
OPTIONS /login 200 8.570 ms - 4
如果我删除 headers,POST 可以工作,但数据(用户名、密码)不会通过。
如何绕过这个 OPTIONS 问题?
浏览器向服务器发送预检选项请求以检查服务器是否启用了 CORS。要在服务器端启用 cors,请将其添加到您的服务器代码中
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.post
顾名思义,针对POST
请求。 OPTIONS
请求不会路由到该方法。
您需要像这样编写一个特定于 options 的处理程序,
app.options("*",function(req,res,next){
res.header("Access-Control-Allow-Origin", req.get("Origin")||"*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
//other headers here
res.status(200).end();
});