Узловой сервер не отвечает на запрос POST в режиме cors с пользовательскими заголовками

1

Я использую express js в backend и делаю fetch в frontend. Мой интерфейс размещен webpack-dev-sever, который работает локально на порту 3000. Мой экспресс-сервер js выполняется локально на порт 3001. Мне нужно отправить некоторые пользовательские заголовки вместе с моим запросом.

Мой экспресс-сервер js использует "morgan" для регистрации на терминале. Код моего сервера выглядит так:

const express = require('express')
const bodyParser = require('body-parser')
const morgan = require('morgan')
const fs = require('fs')
const path = require('path')
const mime = require('mime')
const http = require('http')
const cors = require('cors')

const server = express();

let whitelist = [
    'http://localhost:3000',
];
var corsOptions = {
    origin: function(origin, callback){
        var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
        callback(null, originIsWhitelisted);
    },
    credentials: true
};
server.use(cors(corsOptions));
server.use(bodyParser());
server.use(morgan('dev'));
server.use(function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Content-Type, x-imei, X-API-Key, requestId, Authorization');
  res.header('Access-Control-Allow-Methods', '*');
  next()
})

server.post('/verify/identifier', function(req, res, next) {
  console.log(req.body)
  console.log(req.headers)
  res.send({"responseCode":"0012"});
});

server.listen(port, function() {
  console.log('server hosted on port ${port}')
})

Мой внешний код:

export function fetchMerchantApi(url, body) {
  let reqObj = {
    method: 'POST',
    headers: {
      "Content-Type": "application/json",
      "X-API-Key": secret_key,
      "requestId": getUniqueId()
    },
    cache: 'default',
    mode: 'cors'
  }
  try {
    return new Promise((res, rej) => {
      fetch(url, reqObj).then(result => {
        return result.json()
      }).then(data => {
        res(data)
      });
    })
  } catch(e) {
    throw new Error(e);
  }
}

fetchMerchantApi("http://localhost:3001/verify/identifier", reqBody).then(res => {
console.log(res);
})

Все импорт, синтаксис и т.д. Верны.

Вкладка "Интеграция с инструментами хром-отладчика" такова: Изображение 174551

Журналы в терминале сервера:

тело

[0] {customField1: 'Y',

[0] imei: '358967064854480', [0] imei: '358967064854480',

[0] isMerchantExist: 'Y', [0] isMerchantExist: 'Y',

[0] mobileNo: '9999999999', [0] mobileNo: '9999999999',

[0] serialNumber: 'ZY22285JKV' } [0] serialNumber: 'ZY22285JKV'}

заголовки:

[0] {host: 'localhost: 3001',

[0] connection: 'keep-alive', [0] соединение: "keep-alive",

[0] 'content-length': '119', [0] 'content-length': '119',

[0] 'x-imei': '358967064854480', [0] 'x-imei': '358967064854480',

[0] origin: ' http://localhost:3000 ', [0] происхождение: ' http://localhost: 3000 ',

[0] requestid: '9999999999300513303519185', [0] requestid: '9999999999300513303519185',

[0] 'content-type': 'application/json', [0] 'content-type': 'application/json',

[0] 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36', [0] 'user-agent': 'Mozilla/5.0 (Linux, Android 6.0, Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, например, Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36',

[0] 'x-api-key': 'l7xx5a9a4eea46054ef38b18b5e6fdbd2c5a', [0] 'x-api-key': 'l7xx5a9a4eea46054ef38b18b5e6fdbd2c5a',

[0] accept: '/', [0] принять: '/',

[0] referer: ' http://localhost:3000/auth/verifyNo ', [0] referer: ' http://localhost: 3000/auth/verifyNo ',

[0] 'accept-encoding': 'gzip, deflate, br', [0] "accept-encoding": "gzip, deflate, br",

[0] 'accept-language': 'en-IN,en-GB;q=0.8,en-US;q=0.6,en;q=0.4' } [0] 'accept-language': 'en-IN, en-GB; q = 0.8, en-US; q = 0.6, en; q = 0.4'}

morgain log:

[0] POST/cr/v2/торговец/проверка/идентификатор 200 2.432 мс - 23

В конце концов, я не получаю никаких ошибок, а также никаких данных ответа из бэкэнд.

Забавно, что мой клиент для отдыха (почтальон) отлично работает. Я получаю данные о почтальоне.

Теги:
express
fetch

1 ответ

0

Это сложно. Это запрос options, который является предпродажным запросом в браузере. Запрос options содержит два заголовка HTTP Access-Control-Request-Headers' and Access-Control-Method'. Но похоже, что вы разрешаете каждый метод в вариантах cors.

вы можете включить предварительные

app.options('*', cors())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню