Módulo XMLHttpRequest não definido / encontrado

96

Este é o meu código:

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

Estou recebendo o erro:

Cannot find module 'xmlhttprequest'

Quando removo a primeira linha, recebo:

XMLHttpRequest is not defined

Eu pesquisei por toda parte e as pessoas mencionaram um problema com o Node.js aqui e ali, mas minha instalação do Node estava correta, então não tenho certeza de qual é o problema.

wmash
fonte

Respostas:

158

XMLHttpRequest é um objeto embutido em navegadores da web .

Não é distribuído com o Node; você tem que instalá-lo separadamente ,

  1. Instale-o com npm,

    npm install xmlhttprequest
    
  2. Agora você pode fazer requireisso em seu código.

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

Dito isso, o módulo http é a ferramenta integrada para fazer solicitações HTTP do Node.

Axios é uma biblioteca para fazer solicitações HTTP que está disponível para Node e navegadores que é muito popular atualmente.

Quentin
fonte
2
'xmlhttprequest' não funcionou para mim. Tive que usar 'xhr2' da postagem abaixo para fazer meu script funcionar. O script é compatível com o mais recente Google Chrome - carrega a resposta como ArrayBuffer: "xhr.responseType = 'arraybuffer';"
JerzySBG
20

Como a última atualização do módulo xmlhttprequest foi há cerca de 2 anos , em alguns casos ele não funciona como esperado.

Então, em vez disso, você pode usar o módulo xhr2 . Em outras palavras:

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

torna-se:

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

Mas ... é claro, existem módulos mais populares como Axios , porque -por exemplo- usa promessas:

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

Com a biblioteca xhr2, você pode substituir globalmente o XMLHttpRequestseu código JS. Isso permite que você use bibliotecas externas no nó, que foram planejadas para serem executadas em navegadores / assumem que são executadas em um navegador.

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