CORS проблема с Restify - PullRequest
       6

CORS проблема с Restify

0 голосов
/ 15 января 2019

Я создал приложение ReactJs с Node Api, которое использует Restify, но что бы я ни делал, всегда возникает ошибка для метода POST:

  • 405 (Метод не разрешен)
  • Доступ к выборке в 'http://localhost:3001/api/login' из источника' http://localhost:3000' был заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: Нет 'Access-Control-Allow-Origin'заголовок присутствует на запрашиваемом ресурсе.Если непрозрачный ответ соответствует вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.

Я перепробовал все, что видел в Интернете, но у меня всегда есть эта проблема.

Для вызова API вот мой код:

const request = new Request(url + 'login', {
    method: 'POST',
    body: JSON.stringify({ 'username' : username, 'password' : password }),
    headers: new Headers({ 'Content-Type': 'application/json' })
})
return fetch(request)
    .then(response => {
        if (response.status < 200 || response.status >= 300) {
            throw new Error(response.statusText);
        }
        return response.json();
    })
    .then(({ token }) => {
        localStorage.setItem('token', token);
    });

И я настраиваю Restify следующим образом:

const config = require('./config'),
  restify = require('restify'),
  errs = require('restify-errors');


var connection = config.db.get


const server = restify.createServer({
  name: config.name,
  version: config.version,
  url: config.hostname
});

server.use(restify.plugins.acceptParser(server.acceptable));
server.use(restify.plugins.queryParser());
server.use(restify.plugins.bodyParser());

server.use(
  function crossOrigin(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, OPTIONS, DELETE');
    res.header('Access-Control-Allow-Credentials', false);
    return next();
  }
);

server.listen(3001, function () {
  console.log('%s listening at %s', server.name, server.url);
});

server.post("/api/login", function (req, res) {
  res.send(200);
});

Так что я ожидаю получить подтверждение (код200) после вызова API, но у меня всегда возникает проблема с CORS.

Есть ли что-нибудь еще для настройки?

Спасибо за вашу помощь !!!: D

1 Ответ

0 голосов
/ 09 февраля 2019

Вы должны использовать corsMiddleware, чтобы избежать cors проблемы .... запишите этот код в файл app.js ... он должен работать нормально

var restify = require('restify');
var corsMiddleware = require('restify-cors-middleware');

var cors = corsMiddleware({
        preflightMaxAge: 5,
        origins: ['*'],
        allowHeaders:['X-App-Version'],
        exposeHeaders:[]
      });
/**
 * Initialize Server
 */
 var server = restify.createServer();

server.pre(cors.preflight);
server.use(cors.actual);
...