Node.js &引用;否';访问控制允许原点';标题出现在请求的来源上;CORS不工作(使用npm包CORS)
我正在用React应用程序+NodeJS服务器做一个项目 我的应用程序位于端口3000,服务器位于端口5000 我想在Node.js &引用;否';访问控制允许原点';标题出现在请求的来源上;CORS不工作(使用npm包CORS),node.js,express,cors,Node.js,Express,Cors,我正在用React应用程序+NodeJS服务器做一个项目 我的应用程序位于端口3000,服务器位于端口5000 我想在“/api/users/login”上进行POST请求,但当我这样做时,我收到以下消息: 在“”处访问XMLHttpRequest 来自源“”已被CORS策略阻止: 对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源 这是客户机代码的一部分,我总是在这里进行捕获: axios .post(`$
“/api/users/login”
上进行POST请求,但当我这样做时,我收到以下消息:
在“”处访问XMLHttpRequest
来自源“”已被CORS策略阻止:
对飞行前请求的响应未通过访问控制检查:否
“Access Control Allow Origin”标头出现在请求的服务器上
资源
这是客户机代码的一部分,我总是在这里进行捕获:
axios
.post(`${process.env.REACT_APP_API_URL}/api/users/login`, userData)
.then(res => {
const { token } = res.data;
localStorage.setItem("jwtToken", token);
setAuthToken(token);
const decoded = jwt_decode(token);
dispatch(setCurrentUser(decoded));
window.location.href = "/";
})
.catch(err => {
console.log("err ", err);
dispatch({
type: GET_ERRORS,
payload: err.response.data
});
});
以下是服务器的一部分:
const cors = require("cors");
const whitelist = [
"http://localhost:3000",
"http://localhost:5000",
"https://ofilms.herokuapp.com"
];
const corsOptions = {
origin: function(origin, callback) {
if (whitelist.indexOf(origin) !== -1) {
callback(null, true);
} else {
callback(new Error("Not allowed by CORS"));
}
}
router.post("/api/users/login", cors(corsOptions), (req, res) => {
console.log("corsOptions ", corsOptions);
const email = req.body.email;
const password = req.body.password;
软件包文档:您是否尝试过在没有自定义选项的情况下使用cors
router.post("/api/users/login", cors(), (req, res) => {});
甚至
app.use(cors())
@FirminoChangani我刚刚尝试了它,它正在工作,但是没有白名单,现在每个人都可以访问我的API。您是否尝试将值记录在origin
中?更直观的方法是查看值是否来自通过比较的客户端。此外,记录原始标头以查看源站是否有效也很有用。这是因为express首先调用飞行前:查看它应该与…@token一起工作。但是corsOptions变量中的控制台日志正常,但在路由中,源站不正常defined@PimentoWeb好的,我用app.options('*',cors)替换cors(corsOptions)(corsOptions))在server.js中确实可以使用,但我希望只有当源站位于该白名单内时,才有一个白名单来访问API路由。。