Módulo XMLHttpRequest no definido / encontrado

93

Este es mi codigo:

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

Obtengo el error:

Cannot find module 'xmlhttprequest'

Cuando elimino la primera línea, obtengo:

XMLHttpRequest is not defined

He buscado por todas partes y la gente ha mencionado un problema con Node.js aquí y allá, pero mi instalación de Node fue correcta, así que no estoy seguro de cuál es el problema.

wmash
fuente

Respuestas:

150

XMLHttpRequest es un objeto integrado en los navegadores web .

No se distribuye con Node; tienes que instalarlo por separado ,

  1. Instálelo con npm,

    npm install xmlhttprequest
    
  2. Ahora puedes requirehacerlo en tu código.

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

Dicho esto, el módulo http es la herramienta incorporada para realizar solicitudes HTTP desde Node.

Axios es una biblioteca para realizar solicitudes HTTP que está disponible para Node y navegadores que es muy popular en estos días.

Quentin
fuente
1
'xmlhttprequest' no funcionó para mí. Tuve que usar 'xhr2' de la publicación a continuación para que mi script funcione. El script es compatible con la versión más reciente de Google Chrome: carga la respuesta como ArrayBuffer: "xhr.responseType = 'arraybuffer';"
JerzySBG
21

Dado que la última actualización del módulo xmlhttprequest fue hace aproximadamente 2 años , en algunos casos no funciona como se esperaba.

Entonces, en su lugar, puede usar el módulo xhr2 . En otras palabras:

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

se convierte en:

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

Pero ... claro, hay módulos más populares como Axios , porque -por ejemplo- usa promesas:

// 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
fuente
2

Con la biblioteca xhr2 puede sobrescribir globalmente XMLHttpRequestdesde su código JS. Esto le permite usar bibliotecas externas en el nodo, que estaban destinadas a ejecutarse desde navegadores / supongamos que se ejecutan en un navegador.

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