XMLHttpRequest-Modul nicht definiert / gefunden

94

Das ist mein Code:

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

Ich erhalte den Fehler:

Cannot find module 'xmlhttprequest'

Wenn ich die erste Zeile entferne, erhalte ich:

XMLHttpRequest is not defined

Ich habe überall gesucht und die Leute haben hier und da ein Problem mit Node.js erwähnt, aber meine Installation von Node war korrekt, daher bin ich mir nicht sicher, wo das Problem liegt.

wmash
quelle

Antworten:

153

XMLHttpRequest ist ein in Webbrowsern integriertes Objekt .

Es wird nicht mit Node verteilt. Sie müssen es separat installieren ,

  1. Installiere es mit npm,

    npm install xmlhttprequest
    
  2. Jetzt können Sie requirees in Ihrem Code.

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

Das http-Modul ist jedoch das integrierte Tool zum Erstellen von HTTP-Anforderungen vom Knoten.

Axios ist eine Bibliothek zum Erstellen von HTTP-Anfragen, die für Knoten und Browser verfügbar ist und heutzutage sehr beliebt ist.

QUentin
quelle
1
'xmlhttprequest' hat bei mir nicht funktioniert. Ich musste 'xhr2' aus dem folgenden Beitrag verwenden, damit mein Skript funktioniert. Das Skript ist mit dem neuesten Google Chrome kompatibel - lädt die Antwort als ArrayBuffer: "xhr.responseType = 'arraybuffer';"
JerzySBG
21

Da das letzte Update des xmlhttprequest-Moduls vor ungefähr 2 Jahren erfolgte , funktioniert es in einigen Fällen nicht wie erwartet.

Sie können stattdessen das xhr2-Modul verwenden . Mit anderen Worten:

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

wird:

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

Aber ... natürlich gibt es populärere Module wie Axios , weil zum Beispiel Versprechen verwendet werden:

// 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
quelle
3

Mit der xhr2-Bibliothek können Sie XMLHttpRequestIhren JS-Code global überschreiben . Auf diese Weise können Sie externe Bibliotheken in Knoten verwenden, die von Browsern ausgeführt werden sollten / vorausgesetzt, sie werden in einem Browser ausgeführt.

global.XMLHttpRequest = require('xhr2');
Rok Povsic
quelle