我在node.js的快速框架上編寫了一個REST API,它適用於Chrome中js控制檯的請求和URL欄等。現在試圖讓它適用於來自另一個應用程序,不同域(CORS)的請求。允許CORS REST請求到Heroku上的Express/Node.js應用程序
由javascript前端自動創建的第一個請求是/ api/search?uri =,並且在「預檢」OPTIONS請求中顯示爲失敗。
在我明確的應用程序,我加入CORS標頭,使用:
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
};
和:
app.configure(function() {
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(allowCrossDomain);
app.use(express.static(path.join(application_root, "public")));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
從Chrome的控制檯我得到這些標題:
請求URL:http ://furious-night-5419.herokuapp.com/api/search?uri = http%3A%2F%2Focalocal%3A5000%2Fcollections%2F1%2Fdocuments%2F1
請求方法:OPTIONS
狀態代碼:200 OK
請求頭
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, x-annotator-auth-token, accept
Access-Control-Request-Method:GET
Connection:keep-alive
Host:furious-night-5419.herokuapp.com
Origin:http://localhost:5000
Referer:http://localhost:5000/collections/1/documents/1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5
查詢字符串參數
uri:http://localhost:5000/collections/1/documents/1
響應頭
Allow:GET
Connection:keep-alive
Content-Length:3
Content-Type:text/html; charset=utf-8
X-Powered-By:Express
這看起來像是缺少API應用程序發送的正確頭文件嗎?
謝謝。
我在代碼中沒有寫到這個錯誤,但我不明白'OPTIONS'方法需要處理程序。有人能幫助我理解爲什麼不處理'POST'方法而不是處理'POST' **和**'OPTIONS'方法? –