2014-02-26 74 views
5

我是node.js的新手,遇到了cors問題。我送從一個Express服務器到另一個客戶端AJAX GET請求,但至少我不能夠得到 GET請求響應看起來像:node express server does not respond on ajax

$.ajax({ 
    type: 'GET', 
    url: 'http://localhost:8082/request' 
}); 

我也與設置的報頭AJAX:

'beforeSend : function(xhr) { 
    xhr.setRequestHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS'); 
    xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); 
    xhr.setRequestHeader('Access-Control-Max-Age', '1000'); 
    xhr.setRequestHeader('Authorization', '*')}, 

...或設定CORS模塊中的Node.js:

var cors = require('cors'); 
var app = express(); 
app.use(cors()); 
app.options('*',cors(),function(){ 
console.log("preflight") 
}); 

在兩個Firefox和Chrome,我沒有收到任何答覆(鉻我去t net::ERR_CONNECTION_REFUSED) 在本地PC上運行節點服務器時,一切正常。 curl命令也正常工作。 有沒有機會,這是託管/端口的問題還是我仍然錯過了一些東西?

+0

可能重複[如何允許快遞/的NodeJS CORS?( http://stackoverflow.com/questions/7067966/how-to-allow-cors-in-express-nodejs) –

回答

4

您不需要在$ ajax調用中設置CORS標頭,因爲HTTP 響應標頭中的瀏覽器需要這些標頭。

對於跨域AJAX,請確保您設置crossDomain標誌上的$ AJAX選項:

$.ajax({ 
    url: url, 
    type: 'POST', 
    data: payload, 
    dataType: 'json', 
    crossDomain: true 
}) 

一個乾淨的方式來處理您的明確端點CORS請求將創建您添加到中間件該回應交叉起源的請求快遞路線:

cors.js

module.exports = function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', '*'); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); 
    res.header('Access-Control-Allow-Headers', 'Content-Type'); 
    next(); 
}; 

然後確保你的中間件添加到express端點:

app.post(url, cors, function(req, res) { 
}); 
+3

okey,我終於意識到,我的問題是在設置服務器的url地址。我用真實的域名取代了我所有的「localhost」,在node.js中設置了Cors模塊,並且一切正常。再次感謝您的時間和想法。 – Eidam

1

我有同樣的問題,這個解決:

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 
相關問題