ExpressJs 应用程序中的 cors-js 阻止了应该通过的请求
Posted
技术标签:
【中文标题】ExpressJs 应用程序中的 cors-js 阻止了应该通过的请求【英文标题】:cors-js in an ExpressJs app is blocking a request that should go through 【发布时间】:2019-04-16 19:19:48 【问题描述】:我相信我正确设置了我的 express 应用的 CORS 设置,但我的请求仍然失败。
Express Cors 设置:
app.use(
cors(
origin: ["localhost"]
)
);
app.options("*", cors()); // include before other routes
也试过了
app.use(
cors()
);
app.options("*", cors()); // include before other routes
请求:
fetch(`localhost:5000/charge`,
method: "POST",
headers:
"Content-Type": "application/json"
,
body: (
JSON.stringify(
stripeToken: token.id,
chargeAmount: Math.round(100 * this.state.donationAmount) // Needs to be an integer in cents
)
)
)
.then(res =>
return res.text();
)
.then(txt =>
console.log(txt);
)
浏览器错误:
CORS 策略阻止了从源“http://localhost:5000/charge”获取“http://localhost:5000/charge”的访问权限:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
知道这里出了什么问题吗?我需要回复,所以 no-cors
对我不起作用。
【问题讨论】:
尝试添加.catch()
获取请求,看看你得到什么错误信息。
【参考方案1】:
尝试添加前端的完整 url 并添加如下方法:
app.use(cors(
origin: ['http://localhost:5000'],
methods: ['GET', 'POST', 'PUT', 'DELETE'],
credentials: true // enable set cookie
));
【讨论】:
【参考方案2】:来源只是一个字符串,而不是正则表达式。 RegEx 必须像这样定义:origin: [/.*localhost.*/]
【讨论】:
以上是关于ExpressJs 应用程序中的 cors-js 阻止了应该通过的请求的主要内容,如果未能解决你的问题,请参考以下文章
ExpressJS Generator 中的 Views 文件夹是干啥用的?
中间件和 app.use 在 Expressjs 中的实际含义是啥?