2013-11-02 2 views
4

Я разрабатываю веб-сервис REST в Node.JS для работы с базовым каркасом. Я определил модель Person с urlRoot: http://localhost:3000/users, и я создал обработчик запроса, который добавляет человека в базу данных при получении почтового запроса.Происхождение http: // localhost не разрешено Access-Control-Allow-Origin.

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, но не повезло.

Может кто-нибудь сказать мне, если что-то не так с кодом или каким-либо решением этой проблемы?

ответ

14

Если вы используете express вы можете использовать cors пакет, чтобы CORS как и вместо написания промежуточного программного обеспечения;

var express = require('express') 
, cors = require('cors') 
, app = express(); 

app.use(cors()); 

app.get(function(req,res){ 
    res.send('hello'); 
}); 
+2

Ты лучший! –

+1

@ W.K.S так вы :) – Bulkan

7

Вам необходимо реализовать ответ при использовании того же пути с помощью метода HTTP OPTIONS. У меня есть этот код позволяет 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 
+0

Его работа для меня. Спасибо –

Смежные вопросы