所以我正在设置一个允许跨域请求的应用。使用了这篇文章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.
如果我注释掉顶部代码,我会得到预期的不允许错误,这似乎表明该代码正确处理了请求。我还重新输入了内容类型请求,以确保我没有粘贴奇数字符。有线索吗?
答案 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,欢呼