NodeJS / Express PUT请求失败:请求的资源上没有“Access-Control-Allow-Origin”标头

时间:2015-03-16 04:53:52

标签: node.js express cors

我正在尝试使用NodeJS / Express构建一个服务(驻留在与调用它的站点不同的子域)。

我的GET和POST方法运行正常,但我在使用PUT时遇到了一些麻烦。

我试图实施 corser ,但我仍然收到以下错误:

  

XMLHttpRequest无法加载   http://services.example.org/jobs/_id/5503bb957e4eacd821b5c046。没有   '访问控制允许来源'标题出现在请求的上   资源。起源' http://example.org'因此不允许访问。

以下是我的 corser 实施。我知道其中一些可能是多余的或不必要的。我只是想找到神奇的设置来使PUT请求成功完成。

app.use(corser.create({
    simpleRequestHeaders: corser.simpleRequestHeaders.concat(["PUT"]),
    simpleRequestHeaders: corser.simpleRequestHeaders.concat(["OPTIONS"]),
    simpleResponseHeaders: corser.simpleResponseHeaders.concat(["PUT"]),
    simpleResponseHeaders: corser.simpleResponseHeaders.concat(["OPTIONS"]),
    requestHeaders: corser.simpleRequestHeaders.concat(["X-Requested-With"])
}));
app.all('*', function(request, response, next) {
    response.header('Access-Control-Allow-Origin', '*');
    response.header('Access-Control-Allow-Headers', 'X-Requested-With');
    response.header('Access-Control-Allow-Headers', 'Content-Type');
    response.header('Access-Control-Allow-Methods', 'GET');
    response.header('Access-Control-Allow-Methods', 'POST');
    response.header('Access-Control-Allow-Methods', 'PUT');
    response.header('Access-Control-Allow-Methods', 'DELETE');
    response.header('Access-Control-Allow-Methods', 'OPTIONS');
    next();
});

1 个答案:

答案 0 :(得分:3)

我与 corser 的首席开发人员取得了联系,发现他们非常有帮助。

这是让我超越CORS问题的神奇子弹。

var corser = require('corser');

// Configure CORS (Cross-Origin Resource Sharing) Headers 
app.use(corser.create({
    methods: corser.simpleMethods.concat(["PUT"]),
    requestHeaders: corser.simpleRequestHeaders.concat(["X-Requested-With"])
}));
app.all('*', function(request, response, next) {
    response.header('Access-Control-Allow-Headers', 'Content-Type,X-Requested-With,Authorization,Access-Control-Allow-Origin');
    response.header('Access-Control-Allow-Methods', 'POST,GET,DELETE');
    response.header('Access-Control-Allow-Origin', '*');
    next();
});

希望这对将来有类似问题的人有用。