Mô-đun XMLHttpRequest không được xác định / không tìm thấy


93

Đây là mã của tôi:

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

Tôi gặp lỗi:

Cannot find module 'xmlhttprequest'

Khi tôi xóa dòng đầu tiên, tôi nhận được:

XMLHttpRequest is not defined

Tôi đã tìm kiếm khắp nơi và mọi người đã đề cập đến vấn đề với Node.js ở đây và ở đó nhưng việc cài đặt Node của tôi là chính xác nên tôi không chắc vấn đề là gì.

Câu trả lời:


150

XMLHttpRequest là một đối tượng tích hợp sẵn trong trình duyệt web .

Nó không được phân phối với Node; bạn phải cài đặt nó một cách riêng biệt ,

  1. Cài đặt nó với npm,

    npm install xmlhttprequest
    
  2. Bây giờ bạn có thể requirenó trong mã của bạn.

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

Điều đó nói rằng, mô-đun http là công cụ tích hợp để thực hiện các yêu cầu HTTP từ Node.

Axios là một thư viện để thực hiện các yêu cầu HTTP, có sẵn cho Node và các trình duyệt rất phổ biến hiện nay.


1
'xmlhttprequest' không hoạt động với tôi. Tôi đã phải sử dụng 'xhr2' từ bài đăng bên dưới để làm cho tập lệnh của tôi hoạt động. Tập lệnh tương thích với Google Chrome mới nhất - tải phản hồi dưới dạng ArrayBuffer: "xhr.responseType = 'arraybuffer';"
JerzySBG 25/09/18

21

Vì bản cập nhật cuối cùng của mô-đun xmlhttprequest là khoảng 2 năm trước , nên trong một số trường hợp, nó không hoạt động như mong đợi.

Vì vậy, thay vào đó, bạn có thể sử dụng mô-đun xhr2 . Nói cách khác:

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

trở thành:

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

Nhưng ... tất nhiên, có nhiều mô-đun phổ biến hơn như Axios , bởi vì -ví dụ- sử dụng các lời hứa:

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

Với thư viện xhr2, bạn có thể ghi đè toàn cục XMLHttpRequesttừ mã JS của mình. Điều này cho phép bạn sử dụng các thư viện bên ngoài trong nút, được thiết kế để chạy từ các trình duyệt / giả sử chúng được chạy trong một trình duyệt.

global.XMLHttpRequest = require('xhr2');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.