2016-10-12 5 views
0

Я использую реакцию на отправку данных в мой API. Каждый запрос POST, который я делаю, дает мне запрос OPTIONS, и мне нужно это исправить. Я думаю, мне, возможно, понадобится сделать предварительную структуру, но после прочтения этого я до сих пор не знаю, как ее реализовать.Как включить CORS с сервера Nodejs

На данный момент я соединяясь к моему API, как так ...

fetch('http://localhost:8080/login', { 
     method: 'POST', 
     mode:'cors', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json' 
     }, 
     body: JSON.stringify({ 
      username: this.state.username, 
      password: this.state.password 
     }) 
    }); 

Это называется onSubmit. Я отправляю некоторые данные в мой запрос POST, поэтому я предполагаю, что мне нужны эти заголовки.

Теперь в моем узле JS API сервера У меня есть следующий обработчик ...

var responseHeaders = { 
    "access-control-allow-origin": "*", 
    "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS", 
    "access-control-allow-headers": "content-type, accept", 
    "access-control-max-age": 10, 
    "Content-Type": "application/json" 
}; 

app.post('/login', function(req, res, next) { 
    if (req.method == "OPTIONS") { 
     res.writeHead(statusCode, responseHeaders); 
     res.end(); 
    } 
    console.log("hello"); 
    ... 

Это не работает, однако, когда я делаю запрос я получаю ...

OPTIONS /login 200 8.570 ms - 4 

Если Я удаляю заголовки POST, но данные (имя пользователя, пароль) не передаются.

Как я могу обойти эту проблему?

+0

Проверить это http://stackoverflow.com/q/7067966/3284355 – Molda

ответ

1

app.post как следует из названия, для POST запросов. OPTIONS запрос не будет перенаправлен на этот метод.

Вам нужно написать обработчик для конкретной options, как это так,

app.options("*",function(req,res,next){ 
    res.header("Access-Control-Allow-Origin", req.get("Origin")||"*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    //other headers here 
    res.status(200).end(); 
}); 
+0

нормально это ловит запрос опций, но запрос POST является все еще не читается, и мне это нужно, чтобы передавать данные. – Bolboa

+0

Проверьте свою консоль. Вы видите какие-либо ошибки –

+0

нет Ошибок, запрос параметров выше работает. Но тогда мой обработчик POST, который появляется после обработчика OPTIONS, не работает – Bolboa

2

Браузер отправляет на сервер запрос опций «Параметры», чтобы проверить, разрешен ли CORS на сервере. Чтобы включить CORS на стороне сервера, добавьте в код сервера

app.use(function(req, res, next) { 
     res.header("Access-Control-Allow-Origin", "*"); 
     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     next(); 
    });