节点无法读取Access-control-allow-origin标头

时间:2015-09-07 14:49:07

标签: node.js express header cors

好的,所以这很奇怪我有以下带有以下代码的server.js文件:

    app.all('/*', function (req, res, next) {
    // CORS headers
    res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    // Set custom headers for CORS
    res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key');
    if (res.method === 'OPTIONS') {
        res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain
        res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
        // Set custom headers for CORS
        res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key');
    }
    next();
});

现在我的系统调用的域是api.example.com

我从另一个名为angular.example.com

的网站上拨打此电话

当我这样做时,我在控制台中收到以下错误消息:

XMLHttpRequest cannot load http://api.example.com/api/componentsByModule/125 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://angular.example.com' is therefore not allowed access. The response had HTTP status code 503.

但是从上面的代码可以看出,它应该在所有请求上设置标题

所以我的问题是我做错了什么?

1 个答案:

答案 0 :(得分:1)

在Express中添加中间件的顺序至关重要。您需要确保上面的代码段在所有其他应用路由之前发生。它应该在您最初创建app实例后很快。