如何在Node.js中使用XHR API?

29

这是我之前提出的问题的后续。

假设我有一些javascript代码,它在客户端(浏览器中)正常运行。 这段代码使用浏览器API进行大量XHR调用。

现在,我想在node.js中运行此代码。 node.js是否像浏览器一样提供XHR API?


在服务器上,您可以使用 fs.readFile 简单地读取文件。 - jcubic
你可以尝试使用 fs.readFile 创建 XHR Api。 - jcubic
3
fs.readFile()与XHR无关。如果您想在Node中使用XHR,可以在npm上找到几个模块来实现这一点。但是,请注意整个API可能不同,例如因为Node只有异步网络I/O,所以不会有同步API。 - mscdex
2
fs与发出HTTP请求完全无关,尽管有些人可能认为需要安装“request”模块,但实际上你绝对不需要--Node已经有了API:https://nodejs.org/api/http.html#http_http_get_options_callback - ndugger
@mscdex 大多数ajax请求(除非是跨域资源共享)都会从同一台服务器获取文件,因此您可以使用fs.readFile()来获取它们。 您不需要HTTP请求来获取这些文件。 - jcubic
4个回答

21

你并不需要使用 XHR,因为你可以使用自带于 NodeJShttp.request,它能够发送包含头信息和请求体的GETPOSTPUT请求。

这是文档链接:http.request


19

在本地,Node.js并没有提供浏览器的XHR API。不过,有一个名为 xmlhttprequest 的node模块可以实现这个功能。

如果文件存在于服务器上,你可以使用fs.readFile或fs.readFileSync方法来读取文件。

如果文件存在于远程服务器上,那么你可以使用像request这样的模块来进行异步的XHR类型请求: https://www.npmjs.com/package/request。这需要对代码进行一些重写。

如果你想要最小限度地改变客户端代码,那么使用xmlhttprequest node模块可能是最好的选择。它可以在node中实现浏览器的XHR API。


1
这就是为什么我们在模块中使用Axios。它可以在客户端或服务器端使用,而不需要任何依赖项或代码更改。

1

node-XMLHttpRequest

Node.js 中的示例代码。

const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest

/* --- */

let xhr = new XMLHttpRequest()

xhr.open( 'GET',  'https://example.com' )

xhr.onload = function() {
    
    if ( xhr.status == 200 ) {
        
        console.log( xhr.responseText )
        
    } else {
        
        console.log( `Error: ${xhr.status}` )
        
    }
}

xhr.send()

replit

replit回调函数

replit承诺

replit异步/等待


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接