Модуль 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.