Модуль XMLHttpRequest не определен / не найден


93

Это мой код:

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xhr = new XMLHttpRequest();
xhr.open("GET", "//URL")
xhr.setRequestHeader("Content-Type: application/json", "Authorization: Basic //AuthKey");
xhr.send();

Я получаю сообщение об ошибке:

Cannot find module 'xmlhttprequest'

Когда я удаляю первую строку, я получаю:

XMLHttpRequest is not defined

Я искал повсюду, и люди упоминали о проблеме с Node.js здесь и там, но моя установка Node была правильной, поэтому я не уверен, в чем проблема.

Ответы:


150

XMLHttpRequest - это встроенный объект в веб-браузерах .

Он не распространяется с Node; вам нужно установить его отдельно ,

  1. Установите его с помощью npm,

    npm install xmlhttprequest
    
  2. Теперь вы можете requireэто сделать в своем коде.

    var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
    var xhr = new XMLHttpRequest();
    

Тем не менее, модуль http - это встроенный инструмент для выполнения HTTP-запросов от Node.

Axios - это библиотека для выполнения HTTP-запросов, доступная для Node и браузеров, очень популярных в наши дни.


1
'xmlhttprequest' у меня не работал. Мне пришлось использовать «xhr2» из сообщения ниже, чтобы мой скрипт заработал. Скрипт совместим с новейшим Google Chrome - загружает ответ как ArrayBuffer: "xhr.responseType = 'arraybuffer';"
JerzySBG

21

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

Вместо этого вы можете использовать модуль xhr2 . Другими словами:

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xhr = new XMLHttpRequest();

становится:

var XMLHttpRequest = require('xhr2');
var xhr = new XMLHttpRequest();

Но ... конечно, есть более популярные модули, такие как Axios , потому что, например , используются обещания:

// Make a request for a user with a given ID
axios.get('/user?ID=12345').then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});

2

С помощью библиотеки xhr2 вы можете глобально перезаписать XMLHttpRequestсвой JS-код. Это позволяет вам использовать внешние библиотеки в узле, которые были предназначены для запуска из браузеров / предполагают, что они запускаются в браузере.

global.XMLHttpRequest = require('xhr2');
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.