未定义/找到 XMLHttpRequest module

IT技术 javascript node.js xmlhttprequest
2021-02-18 11:30:16

这是我的代码:

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 安装是正确的,所以我不确定问题是什么。

3个回答

XMLHttpRequest 是Web 浏览器中的内置对象

它不与 Node.js 一起分发。http module是用于从 Node.js 发出 HTTP 请求的内置工具。

大多数从节点发出 HTTP 请求的人使用具有更友好 API 的第三方库。两个流行的选择是Axios(用于 Node.js 和浏览器)和node-fetch(它实现了浏览器内置的 fetch API,是 XMLhttpRequest 的现代替代品。

如果你真的想在 Node.js 中使用 XHR,那么有几个第三方实现。xmlhttprequest(似乎没有维护)和xhr2(今年有更新)。

  1. 用 npm 安装,

     npm install xhr2
    
  2. 现在您可以require在您的代码中使用它。

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

由于xmlhttprequest module的上次更新是大约2 年前,因此在某些情况下它无法按预期工作。

因此,您可以使用xhr2 module换句话说:

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

变成:

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

但是……当然,还有更流行的module,比如Axios,因为 - 例如 - 使用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);
});

使用xhr2 库,您可以XMLHttpRequest从您的 JS 代码全局覆盖这允许您在 node 中使用外部库,这些库旨在从浏览器运行/假设它们在浏览器中运行。

global.XMLHttpRequest = require('xhr2');