Вы не показываете нам детали фактического запроса, но если запрос содержит определенные особые условия, браузер попытается предварительно выполнить запрос с запросом OPTIONS, прежде чем он выдаст POST. Когда вы вставляете вызов cors()
только в обработчик маршрута app.post()
, запрос OPTIONS не обрабатывается, и если этот конкретный запрос перекрестного источника является типом, запускающим предварительный полет OPTIONS, то, поскольку вы его не обрабатываете запрос не будет выполнен.
Вы можете решить эту проблему, добавив следующее:
app.options('/api/submitEmail', cors(), (req, res) => res.send());
Поскольку это будет обрабатывать предварительный полет ОПЦИИ для этого указанного c маршрута.
Вы можете прочитать о том, что такое «простой запрос» здесь . Все, кроме простого запроса, требует предварительных опций. Это может быть так же просто, как установка отдельного пользовательского заголовка или типа контента, который не разрешен в простом запросе и который вызовет предварительный полет OPTIONS.
Когда вы сделали app.use(cors());
, это обработано предварительный запрос OPTIONS для вас автоматически, поскольку все глаголы HTTP отправляются обработчикам app.use()
, а обработчик промежуточного программного обеспечения cors()
поддерживает правильные действия для запроса OPTIONS.
Кроме того, в вашем обработчике запросов POST , вам НУЖНО отправить ответ, или клиент просто будет сидеть там, ожидая ответа, и в конечном итоге истечет время ожидания.