Node.js 向REST API发送POST请求时没有“访问控制允许来源”策略错误
我正在做一个简单的完整堆栈项目,其中我有一个使用NodeJS和Express构建的非常基本的restapi。它是一个服务器端呈现的网站 尝试登录时,当我向登录端点发送POST请求时,控制台中出现以下错误 访问位于“”的XMLHttpRequesthttp://127.0.0.1:3000/api/v1/users/login' 源于http://localhost:3000'已被CORS策略阻止: 对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源 这是发送POST请求的代码段Node.js 向REST API发送POST请求时没有“访问控制允许来源”策略错误,node.js,rest,express,post,cors,Node.js,Rest,Express,Post,Cors,我正在做一个简单的完整堆栈项目,其中我有一个使用NodeJS和Express构建的非常基本的restapi。它是一个服务器端呈现的网站 尝试登录时,当我向登录端点发送POST请求时,控制台中出现以下错误 访问位于“”的XMLHttpRequesthttp://127.0.0.1:3000/api/v1/users/login' 源于http://localhost:3000'已被CORS策略阻止: 对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin
const login = async (email,password) => {
try {
const res = await axios({
method: 'POST',
url: 'http://127.0.0.1:3000/api/v1/users/login',
data: {
email,
password
}
});
if(res.data.status === 'success') {
alert('Logged in successfully');
window.setTimeout(() => {
location.assign('/');
}, 1500);
}
}
catch(err) {
console.log(err);
}
}
请解释一下我为什么会出现这个错误以及如何修复它。API尚未部署,并且正在本地主机上运行。您是否可以将Access Control Allow Origin标头添加到请求中,并查看
const login = async (email,password) => {
try {
const res = await axios({
method: 'POST',
url: 'http://127.0.0.1:3000/api/v1/users/login',
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
},
data: {
email,
password
}
});
if(res.data.status === 'success') {
alert('Logged in successfully');
window.setTimeout(() => {
location.assign('/');
}, 1500);
}
}
catch(err) {
console.log(err);
}
}
您的请求来源是:
http://localhost:3000
这与您将请求发送到的域不同:
http://127.0.0.1:3000
要避免此CORS错误,必须相同,包括主机名和端口。或者您可以为CORS配置服务器。就服务器而言,不同的主机意味着一个完全独立的实体,即使它是同一台机器
将您的url更改为:
url: 'http://localhost:3000/api/v1/users/login',
我尝试了这个解决方案,它似乎已经修复了与CORS相关的错误,但是由于以下错误,请求仍然没有成功执行:请求失败,状态代码400位于e.exports spread.js:25位于e.exports spread.js:25位于XMLHttpRequest.l.onreadystatechange spread.js:25