2013-04-08 51 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,歡呼聲