Nie zdefiniowano / nie znaleziono modułu XMLHttpRequest

93

To jest mój kod:

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

Otrzymuję błąd:

Cannot find module 'xmlhttprequest'

Kiedy usuwam pierwszą linię, otrzymuję:

XMLHttpRequest is not defined

Szukałem wszędzie i ludzie wspominali o problemie z Node.js tu i tam, ale moja instalacja Node była poprawna, więc nie jestem pewien, na czym polega problem.

wmash
źródło

Odpowiedzi:

150

XMLHttpRequest to obiekt wbudowany w przeglądarki internetowe .

Nie jest rozpowszechniany z Node; trzeba go zainstalować osobno ,

  1. Zainstaluj go za pomocą npm,

    npm install xmlhttprequest
    
  2. Teraz możesz to requirezrobić w swoim kodzie.

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

To powiedziawszy, moduł http jest wbudowanym narzędziem do wysyłania żądań HTTP z Node.

Axios to biblioteka do wykonywania żądań HTTP, która jest dostępna dla węzła i przeglądarek, która jest obecnie bardzo popularna.

Quentin
źródło
1
„xmlhttprequest” nie działa dla mnie. Musiałem użyć 'xhr2' z postu poniżej, aby mój skrypt działał. Skrypt jest kompatybilny z najnowszą przeglądarką Google Chrome - ładuje odpowiedź jako ArrayBuffer: "xhr.responseType = 'arraybuffer';"
JerzySBG
21

Ponieważ ostatnia aktualizacja modułu xmlhttprequest miała miejsce około 2 lata temu , w niektórych przypadkach nie działa zgodnie z oczekiwaniami.

Zamiast tego możesz użyć modułu xhr2 . Innymi słowy:

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

staje się:

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

Ale ... oczywiście są bardziej popularne moduły, takie jak Axios , ponieważ - na przykład - korzysta z obietnic:

// 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);
});
robe007
źródło
2

Dzięki bibliotece xhr2 możesz globalnie nadpisywać XMLHttpRequestz kodu JS. Pozwala to na korzystanie z zewnętrznych bibliotek w węźle, które były przeznaczone do uruchamiania z przeglądarek / zakładają, że są uruchamiane w przeglądarce.

global.XMLHttpRequest = require('xhr2');
Rok Povsic
źródło