未定义/找到XMLHttpRequest模块


96

这是我的代码:

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

Answers:


157

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

它不随Node一起分发;您必须单独安装它

  1. 用npm安装

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

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

也就是说,http模块是用于从Node发出HTTP请求的内置工具。

Axios是一个用于发出HTTP请求的库,该库可用于当今非常流行的Node和浏览器。


2
'xmlhttprequest'对我不起作用。我必须使用下面文章中的“ xhr2”来使脚本正常工作。脚本与最新的Google Chrome浏览器兼容-将响应加载为ArrayBuffer:“ xhr.responseType ='arraybuffer';”
JerzySBG

20

由于xmlhttprequest模块的上一次更新是在2年前,因此在某些情况下它无法按预期运行。

因此,可以使用xhr2模块。换一种说法:

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

变成:

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

但是...当然,还有更受欢迎的模块,例如Axios,因为-例如-使用promises:

// 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);
});

3

使用xhr2库,您可以XMLHttpRequest从JS代码全局覆盖。这允许您在节点中使用要从浏览器运行的外部库,也可以假定它们在浏览器中运行。

global.XMLHttpRequest = require('xhr2');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.