Javascript 使用my node/express rest api服务器获取数据时阻止CORS
我有一个正在运行的localhost node/express服务器,它应该允许任何带有某个主体的post请求,然后返回带有某个消息的相同主体。我已将cors节点包用于我的express中间件,以允许cors 但我在这里面临一个问题,我可以很容易地在系统中使用POSTMAN应用程序的post请求并获得输出,但当我尝试从其他域(如codepen、JSFIDLE)获取请求时,我会不断获得CORS阻止响应,即使我允许在节点服务器中进行跨源资源共享 以下是我所做的: 在我的服务器端express应用程序中:Javascript 使用my node/express rest api服务器获取数据时阻止CORS,javascript,node.js,express,cors,fetch,Javascript,Node.js,Express,Cors,Fetch,我有一个正在运行的localhost node/express服务器,它应该允许任何带有某个主体的post请求,然后返回带有某个消息的相同主体。我已将cors节点包用于我的express中间件,以允许cors 但我在这里面临一个问题,我可以很容易地在系统中使用POSTMAN应用程序的post请求并获得输出,但当我尝试从其他域(如codepen、JSFIDLE)获取请求时,我会不断获得CORS阻止响应,即使我允许在节点服务器中进行跨源资源共享 以下是我所做的: 在我的服务器端express应用程序
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
app.use(cors({
origin: "*", //also tried: origin: "https://codepen.io"
methods: "GET, POST, PUT, DELETE",
allowedHeaders: 'Content-Type, Authorization'
}));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // application/json
app.post('/post', (req, res, next) => {
const title = req.body.title;
const id = req.body.id;
res.status(201).json({
message: "POST request successful",
resBody: {
title: title,
id: id
}
})
});
app.listen(4001);
对于我的客户端javascript获取代码:
const options = {
method: 'POST',
body: JSON.stringify({
title: 'foo',
id: 1
}),
headers: {
'Content-Type': 'application/json'
}
};
fetch('http://localhost:4001/post', options)
.then((response) => {
return response.json();
})
.then((jsonObject) => {
console.log(jsonObject)
})
.catch((error) => {
console.log(error);
});
我在控制台中收到以下消息:
已阻止跨源请求:同一源策略不允许读取位于的远程资源。原因:CORS请求未成功
我知道这些类型的问题已经被回答了太多的时间了,但是我不明白为什么在允许我的服务器使用CORS后仍然会出现错误
请有人解释一下。您是否试图在没有任何数据的情况下通过cors?因为我也有同样的问题,我只是通过传递app.usecors来修复它
默认情况下,它会打开任何原点,它一点也不安全,但它对我有效你没有正确处理飞行前的情况。非简单请求(如您的请求)的contentType与默认值不同,必须发送预飞行,服务器必须对此作出响应。在服务器端或客户端,我必须在哪里处理它们?我该如何处理?你能解释一下吗?你已经很接近了,你只需要确保你在node.js中的CORS配置允许选项请求并正确响应它们。您正在使用的模块的文档应该解释如何操作。我也允许服务器进行选项请求,但仍然得到相同的错误。它是否与我的clent端代码有关?我不明白为什么会发生这种情况。客户端不需要更改。此外,如果我在获取请求中设置请求头“Content Type”:“text/plain”,我会获得连接ok201,但我看不到从服务器发送的数据。我认为问题在于内容类型application/json。有什么想法吗?