2013-04-08 47 views
0

因此,我设置了一个应用程序以允许跨域请求。在这篇文章中使用了各种方法How to enable cross-origin resource sharing (CORS) in the express.js framework on node.jsCORS问题与节点

但是,我得到一个错误,我似乎无法理清。这是我正在使用的(不是我尝试了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. 

如果我注释掉上面代码中,我得到预期不允许错误,似乎表明该请求是否正确由代码处理。我还重新输入了内容类型的请求,以确保我没有粘贴奇怪的字符。任何线索?

回答

4

您有两个Access-Control-Allow-Headers标题。最后一个会取胜。

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

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,欢呼声