我正在开发Node.JS中的REST Web服务以使用骨干框架。
我已经使用urlRoot:http://localhost:3000/users
定义了一个Person模型,并且我创建了一个请求处理程序,它在收到post请求时将人员添加到数据库中。
app.post('/users', user.add(db));
exports.add = function(db){
return function(req,res){
console.log(req.body);
var name = req.body.name;
var age = req.body.age;
var sex = req.body.sex;
var job = req.body.job;
var peopleDb = db.get('people');
peopleDb.insert({
'name':name,
'age':age,
'sex':sex,
'job':job
},function(e,docs){
if(e){
console.log(e);
}else
{
res.setHeader('Content-Type','application/json');
res.setHeader('Access-Control-Allow-Origin','*');
res.setHeader('Access-Control-Allow-Methods','GET,PUT,POST,DELETE');
res.writeHead(200);
res.end(JSON.stringify(docs));
}
});
}
}
当我尝试执行代码时,我在控制台中得到了这个:
Origin http://localhost is not allowed by Access-Control-Allow-Origin.
我从其他答案中读到添加标题:Access-Control-Allow-Origin:*
和Access-Control-Allow-Methods:GET,PUT,POST,DELETE
可以解决问题,但它对我没用。我也尝试将这些标题放在.htaccess文件中,但没有运气。
有人可以告诉我代码是否有问题或是否有解决此问题的方法?
答案 0 :(得分:17)
如果您使用express
,可以使用cors包来允许CORS,而不是编写中间件;
var express = require('express')
, cors = require('cors')
, app = express();
app.use(cors());
app.get(function(req,res){
res.send('hello');
});
答案 1 :(得分:7)
使用OPTIONS
HTTP方法使用相同路径时,需要实现响应。我有这个代码允许在整个快速应用程序中使用CORS:
var app = express()
app.use(function(req, res, next) {
if (req.headers.origin) {
res.header('Access-Control-Allow-Origin', '*')
res.header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,Authorization')
res.header('Access-Control-Allow-Methods', 'GET,PUT,PATCH,POST,DELETE')
if (req.method === 'OPTIONS') return res.send(200)
}
next()
})
// configure your routes