Установка промежуточного ПО Заголовки cors работают с app.use (), но не для указанного c маршрута - PullRequest
0 голосов
/ 15 марта 2020

промежуточное ПО:

const enableCors = (req, res, next) => {
  res.set({
    'Access-Control-Allow-Origin': 'http://127.0.0.1:5500',
    'Access-Control-Allow-Headers': 'content-type'
  });
  next();
};
//this works from postman as well as from browser

Вышеуказанное промежуточное ПО прекрасно работает при добавлении следующим образом app.use(enableCors);, но я хочу, чтобы оно работало с указанным c маршрутом, и я использую его следующим образом:

app.post('/resource', enableCors, (req, res, next)=>{
    res.json({msg:'success'});
});
//this only works from postman

Я почти уверен, что это связано с тем, как работают предполетные запросы, потому что при запросе от почтальона это работает в любом случае. но когда он запрашивается из браузера с помощью fetch (), он работает только с app.use(), это запрос выборки внешнего интерфейса:

fetch('http://localhost:3000/resource', {
    method: 'POST',
    headers: {
    'Content-Type': 'application/json'
    },
    body: JSON.stringify({ key:'value' })
})
.then(res => {
    console.log(res);
})
.catch(err => {
    console.log('something went wrong', err);
    });

, что мешает ему работать с указанным c маршрутом при запросе от браузер

1 Ответ

0 голосов
/ 15 марта 2020

CORS работает, когда браузер отправляет заголовок опции, поэтому попробуйте добавить новый маршрутизатор, например:

app.options('/resource', enableCors, (req, res) => res.send());

Почтальон не подвержен влиянию CORS, поскольку он не является браузером.

...