Node的CORS问题

时间:2013-04-08 01:34:37

标签: javascript node.js cors

所以我正在设置一个允许跨域请求的应用。使用了这篇文章How to enable cross-origin resource sharing (CORS) in the express.js framework on node.js

中的各种方法

然而,我得到一个错误,我似乎无法解决。这是我正在使用的(不是我尝试了大约3种方法 - 它们都给出了同样的错误)。

 app.use(function(req, res, next){
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'X-Requested-With');
  next();
})
.options('*', function(req, res, next){
    res.end();
});

这给我一个错误:

XMLHttpRequest cannot load http://localhost:3000/blah. Request header field Content-Type is not allowed by Access-Control-Allow-Headers. 

如果我注释掉顶部代码,我会得到预期的不允许错误,这似乎表明该代码正确处理了请求。我还重新输入了内容类型请求,以确保我没有粘贴奇数字符。有线索吗?

2 个答案:

答案 0 :(得分:4)

您有两个Access-Control-Allow-Headers标头。最后一个会赢。

您可能需要一个Access-Control-Allow-Headers标头,其值为逗号分隔列表。

答案 1 :(得分:0)

使用cors插件,更简单,无需手动设置res.header

在此处获取插件:https://github.com/troygoode/node-cors

示例REST API代码:

'use strict';

var express = require('express'),
    cors = require('cors'),
    port = process.env.PORT || 3000,
    connect = require('connect'),
    app = express();

app.use(connect.bodyParser()); //For POST method JSON form data

//GET method
app.get('/books', cors(), function(req, res){
      //send JSON etc
      res.json({});
});

//POST method
app.post('/books/', cors(), function(req, res){                          
    var book = req.body;

    //insert book to DB etc

    //send result back to client
    res.send(book);
});

//start server on port 3000
if(!module.parent){
  app.listen(port, function(){
    console.log('Express server listening on port ' + port + '.');
  });
}

现在,您可以从任何位置,端口等访问REST API,欢呼