XMLHttpRequest 模块未定义/找到

2022-08-30 05:20:40

这是我的代码:

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


答案 1

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

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

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

2022年更新:默认情况下,节点 18 的本机实现已启用fetch

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

  1. 用 npm 安装它,

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

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

答案 2

由于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);
});