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.

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.


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);
});

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');
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.