未定义/未找到 XMLHttpRequest 模块

新手上路,请多包涵

这是我的代码:

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

原文由 wmash 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

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

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

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

_2022 年更新_:Node 18 有一个本地实现 fetch 默认启用

如果你真的想在 Node.js 中使用 XHR,那么有几个第三方实现。 xmlhttprequest (似乎没有维护)和 xhr2 (当我将它添加到这个答案时它有更新但似乎已经被开发人员放弃了)。

  1. 使用 npm 安装它,
     npm install xhr2

  1. 现在你可以在你的代码中 require 它。
     var XMLHttpRequest = require('xhr2');
    var xhr = new XMLHttpRequest();

原文由 Quentin 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 robe007 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏