Modul XMLHttpRequest tidak ditentukan / ditemukan

93

Ini kode saya:

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

Saya mendapatkan kesalahan:

Cannot find module 'xmlhttprequest'

Saat saya menghapus baris pertama, saya mendapatkan:

XMLHttpRequest is not defined

Saya telah mencari di mana-mana dan orang-orang telah menyebutkan masalah dengan Node.js di sana-sini tetapi instalasi Node saya benar jadi saya tidak yakin apa masalahnya.

wmash
sumber

Jawaban:

150

XMLHttpRequest adalah objek bawaan di browser web .

Itu tidak didistribusikan dengan Node; Anda harus menginstalnya secara terpisah ,

  1. Instal dengan npm,

    npm install xmlhttprequest
    
  2. Sekarang Anda dapat requiremelakukannya di kode Anda.

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

Meskipun demikian, modul http adalah alat bawaan untuk membuat permintaan HTTP dari Node.

Axios adalah library untuk membuat permintaan HTTP yang tersedia untuk Node dan browser yang sangat populer saat ini.

Quentin
sumber
1
'xmlhttprequest' tidak berhasil untuk saya. Saya harus menggunakan 'xhr2' dari posting di bawah ini untuk membuat skrip saya berfungsi. Skrip kompatibel dengan Google Chrome terbaru - memuat respons sebagai ArrayBuffer: "xhr.responseType = 'arraybuffer';"
JerzySBG
21

Karena pembaruan terakhir modul xmlhttprequest adalah sekitar 2 tahun yang lalu , dalam beberapa kasus modul ini tidak berfungsi seperti yang diharapkan.

Jadi sebagai gantinya, Anda dapat menggunakan modul xhr2 . Dengan kata lain:

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

menjadi:

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

Tapi ... tentu saja, ada modul yang lebih populer seperti Axios , karena -misalnya- menggunakan promise:

// 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);
});
jubah007
sumber
2

Dengan pustaka xhr2 Anda dapat menimpa secara global XMLHttpRequestdari kode JS Anda. Ini memungkinkan Anda untuk menggunakan pustaka eksternal di node, yang dimaksudkan untuk dijalankan dari browser / anggap mereka dijalankan di browser.

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