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 阻止了应该通过的请求的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS中的ExpressJS变量 - 平均堆栈

ExpressJS Generator 中的 Views 文件夹是干啥用的?

学习使用ExpressJS 4.0中的新Router

中间件和 app.use 在 Expressjs 中的实际含义是啥?

使用 ExpressJS 访问 Apollo Server 中的 Request 对象

ExpressJS & Websocket & 会话共享