HTTP-запрос перекрестного происхождения, исходящий от NodeJS / Axios / JSDOM на стороне сервера - PullRequest
0 голосов
/ 27 июня 2018

Я использую Axios для создания HTTP-запроса к серверу API в другом домене.

  • Сервер API разрешает перекрестные запросы от http://localhost:3000.
  • У меня нет контроля над сервером API.
  • Мое приложение обычно запускается в http://localhost:3000 и отправляет запросы из браузера.

Нет проблем до этого момента. Запросы Cross-Origin работают нормально. Однако недавно я хочу добавить модульный тест для этих вызовов API. Это тестовая среда jsdom, так как я использую Jest. Это создает проблему, когда я создаю HTTP-запрос со стороны сервера , источник установлен на http://localhost, что не разрешено сервером.

Запрос сделан с использованием Axios:

axios.post(`${API_DOMAIN}/member/account/login`, {
  username,
  password,
}, {
  headers: {
    Origin: 'http://localhost:3000'
  }
})

Однако в ответе все еще говорится, что

error: Cross origin http://localhost forbidden

Как изменить «Источник» HTTP-запроса, который я создаю с помощью Axios в jsdom, на значение, отличное от http://localhost? Мне нужно, чтобы оно было http://localhost:3000, чтобы сервер API позволял мне.

1 Ответ

0 голосов
/ 27 июня 2018

Оказывается, jsdom - это тот, кто создает источник localhost, и предотвращает перекрестные запросы. С https://github.com/axios/axios/issues/1180 я смог решить мою проблему. В тестовом наборе поместите этот код перед любыми HTTP-запросами axios:

axios.defaults.adapter = require('axios/lib/adapters/http')

Это заставит Axios использовать HTTP-адаптер NodeJS вместо XMLHttpRequests JSDOM. Таким образом, не возникнет проблема перекрестного происхождения.

...