Access-Control-Allow-Origin不允许来源http:// localhost。

我正在Node.JS中开发一个REST web服务来处理骨干框架。 我已经使用urlRoot定义了一个Person模型: http://localhost:3000/users并且我创build了一个请求处理程序,在接收到一个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文件中,但没有运气。

有人可以告诉我,如果代码有问题或解决这个问题?

如果你使用express你可以使用cors包来允许CORS这样写,而不是写中间件;

 var express = require('express') , cors = require('cors') , app = express(); app.use(cors()); app.get(function(req,res){ res.send('hello'); }); 

在使用OPTIONS HTTP方法使用相同的path时,您需要实现一个响应。 我有这个代码允许在一个快速的应用程序的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