Express CORS可在其他端点上工作,但只有一个

时间:2018-11-26 05:17:27

标签: node.js express cors

我有一个简单的Express项目作为我的API端点,使用cors作为中间件。

除其他外,cors可以在其他任何端点上工作。这是我的代码快照:

const express = require('express');
var cors = require('cors');
const app = express();

app.use(cors());

app.get('/shuttles',
    tokenPassport.authenticate('bearer', { session: false }),
    (req, res) => {
        // ....
        // implementation goes here...
        // ....
})

app.get('/deposit',
    tokenPassport.authenticate('bearer', { session: false }),
    (req, res) => {
        // ....
        // implementation goes here...
        // ....
})

/deposit中的CORS正在工作,但不能与/shuttles一起使用。

注意:不用考虑tokenPassport的要求。这是为了授权。

编辑

这是chrome devtool中的“网络”标签的快照。它仅发送OPTIONS请求,这就是响应头。响应中没有Access-Control-Allow-Origin标头。

snapshot

3 个答案:

答案 0 :(得分:2)

您可以在app.jsserver.js文件中创建自己的中间件。

//CORS
app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,Accept,Authorization');
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});

如果您想使用cros模块

const corsOptions = {
    "origin": "*",
    "methods": "GET, HEAD, PUT, PATCH, POST, DELETE",
    // other options
}

app.use(cors(corsOptions));

答案 1 :(得分:1)

您好,您可以尝试在快速服务器 app.options('*', cors());中添加此行。还可以检查在调用/shuttles端点时是否从客户端应用程序中向*

添加“ access-control-origins”标头吗?

答案 2 :(得分:0)

经过沉思,在宇宙中找到了解决方案,我的Express应用程序托管在Google App Engine中,我意识到我的dispatch.yaml包含

- url: "*/shuttles*"
  service: shuttle

这是问题的根源。 只需重新整理班车服务和路线,即可解决:D

感谢您的所有评论,没关系。