Как обрабатывать пользовательские заголовки в запросе OPTIONS - PullRequest
0 голосов
/ 30 января 2020

То, что я пытаюсь получить, это отправить пользовательский заголовок через запрос к API. У меня есть приложение реакции в качестве клиента и приложение express в качестве службы. В моем сервисе я устанавливаю следующее:

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header(
    'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept, Authorization, my-custom-header',
  );
  res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, PATCH');
  next();
});

И в своем приложении реакции я использую топор ios, чтобы использовать сервис следующим образом:

const callEndpoint = (dataToPost) =>
 axios.post(
   {
     `${my-url}/{my-endpoint}`,
     { dataToPost },
     { headers: { 'my-custom-header': 'anyStringValue' },
   }
 ).then((res) => handleRes(res))
  .catch((err) => handleErr(err));

Однако каждый когда я звоню callEndpoint(dataToPost) Я получаю эту ошибку от CORS в предполетном полете:

Access to XMLHttpRequest at 'http://my-url/my-endpoint' from origin 'http://localhost:PORT' has been blocked by CORS policy: Request header field my-custom-header is not allowed by Access-Control-Allow-Headers in preflight response.

Я думал, что добавление my-custom-header в конфигурации службы позволит мне продолжить, но это не так. Я также попытался установить 'Access-Control-Allow-Headers': '*', но не сработало.

Я также попытался использовать пакет cors, например:

const corsOptions = function (req, callback) {
  callback(null, { allowedHeaders: '*' })
}
app.use(cors(corsOptions));

Но при локальном тестировании я не получил Access-Control-Allow-Headers: * в заголовках ответа. Итак, я даже не развернул этот кусок кода на сервере.

Что я должен сделать, чтобы мой настраиваемый заголовок проходил CORS при предварительном просмотре?

Заранее спасибо.

1 Ответ

2 голосов
/ 30 января 2020

см. Ниже

//if you want to add cors app level  
app.options('*', cors()) // include before other routes

//if you want to add cors single rout level
app.options('/products/:id', cors())
app.del('/products/:id', cors(), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for all origins!'})
})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...