Node.js 向REST API发送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

我正在做一个简单的完整堆栈项目,其中我有一个使用NodeJS和Express构建的非常基本的restapi。它是一个服务器端呈现的网站

尝试登录时,当我向登录端点发送POST请求时,控制台中出现以下错误

访问位于“”的XMLHttpRequesthttp://127.0.0.1:3000/api/v1/users/login' 源于http://localhost:3000'已被CORS策略阻止: 对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源

这是发送POST请求的代码段

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