Module XMLHttpRequest non défini / trouvé

93

Voici mon 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();

J'obtiens l'erreur:

Cannot find module 'xmlhttprequest'

Lorsque je supprime la première ligne, j'obtiens:

XMLHttpRequest is not defined

J'ai cherché partout et des gens ont mentionné un problème avec Node.js ici et là, mais mon installation de Node était correcte, donc je ne suis pas sûr de quel est le problème.

wmash
la source

Réponses:

150

XMLHttpRequest est un objet intégré dans les navigateurs Web .

Il n'est pas distribué avec Node; vous devez l' installer séparément ,

  1. Installez-le avec npm,

    npm install xmlhttprequest
    
  2. Vous pouvez maintenant le faire requiredans votre code.

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

Cela dit, le module http est l'outil intégré pour effectuer des requêtes HTTP à partir de Node.

Axios est une bibliothèque pour faire des requêtes HTTP qui est disponible pour Node et les navigateurs qui est très populaire de nos jours.

Quentin
la source
1
«xmlhttprequest» ne fonctionnait pas pour moi. J'ai dû utiliser 'xhr2' du post ci-dessous pour faire fonctionner mon script. Le script est compatible avec le dernier Google Chrome - charge la réponse en tant que ArrayBuffer: "xhr.responseType = 'arraybuffer';"
JerzySBG
21

Étant donné que la dernière mise à jour du module xmlhttprequest remonte à environ 2 ans , dans certains cas, cela ne fonctionne pas comme prévu.

Donc à la place, vous pouvez utiliser le module xhr2 . En d'autres termes:

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

devient:

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

Mais ... bien sûr, il existe des modules plus populaires comme Axios , car -par exemple- utilise des promesses:

// 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
la source
2

Avec la bibliothèque xhr2, vous pouvez écraser globalement à XMLHttpRequestpartir de votre code JS. Cela vous permet d'utiliser des bibliothèques externes dans le nœud, qui étaient destinées à être exécutées à partir de navigateurs / supposent qu'elles sont exécutées dans un navigateur.

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