ไม่ได้กำหนด / พบโมดูล XMLHttpRequest


93

นี่คือรหัสของฉัน:

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

ฉันได้รับข้อผิดพลาด:

Cannot find module 'xmlhttprequest'

เมื่อฉันลบบรรทัดแรกฉันจะได้รับ:

XMLHttpRequest is not defined

ฉันได้ค้นหาทั้งหมดและมีคนพูดถึงปัญหาเกี่ยวกับ Node.js ที่นี่และที่นั่น แต่การติดตั้ง Node ของฉันถูกต้องดังนั้นฉันจึงไม่แน่ใจว่าปัญหาคืออะไร

คำตอบ:


150

XMLHttpRequest เป็นในตัววัตถุที่อยู่ในเว็บเบราว์เซอร์

ไม่มีการแจกจ่ายด้วย Node คุณจะต้องติดตั้งแยกต่างหาก ,

  1. ติดตั้งด้วย npm

    npm install xmlhttprequest
    
  2. ตอนนี้คุณสามารถทำได้requireในรหัสของคุณ

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

ที่กล่าวว่าโมดูล httpเป็นเครื่องมือในตัวสำหรับการร้องขอ HTTP จาก Node

Axiosเป็นไลบรารีสำหรับการร้องขอ HTTP ซึ่งมีให้สำหรับ Node และเบราว์เซอร์ที่ได้รับความนิยมอย่างมากในปัจจุบัน


1
'xmlhttprequest' ไม่ได้ผลสำหรับฉัน ฉันต้องใช้ 'xhr2' จากโพสต์ด้านล่างเพื่อให้สคริปต์ของฉันทำงานได้ สคริปต์เข้ากันได้กับ Google Chrome ใหม่ล่าสุด - โหลดการตอบสนองเป็น ArrayBuffer: "xhr.responseType = 'arraybuffer';"
JerzySBG

21

เนื่องจากการอัปเดตโมดูล xmlhttprequestครั้งล่าสุดเมื่อประมาณ2 ปีที่แล้วในบางกรณีก็ไม่ทำงานตามที่คาดไว้

ดังนั้นคุณสามารถใช้โมดูล xhr2 แทนได้ กล่าวอีกนัยหนึ่ง:

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

กลายเป็น:

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

แต่ ... แน่นอนว่ามีโมดูลที่เป็นที่นิยมมากกว่าเช่นAxiosเนื่องจาก - ตัวอย่างเช่น - ใช้สัญญา:

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

ด้วยไลบรารี xhr2คุณสามารถเขียนทับได้ทั่วโลกXMLHttpRequestจากรหัส JS ของคุณ สิ่งนี้ช่วยให้คุณใช้ไลบรารีภายนอกในโหนดที่ตั้งใจให้เรียกใช้จากเบราว์เซอร์ / สมมติว่ารันในเบราว์เซอร์

global.XMLHttpRequest = require('xhr2');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.