Node.js的http模块是否存在与XMLHttpRequest.readyState等效的属性?
Node.js http模块与XMLHttpRequest readyState等效实现说明
核心结论
Node.js 原生http/https模块没有和XHR的readyState完全对等的内置属性。二者设计逻辑不同:XMLHttpRequest 采用状态标记轮询的模式暴露请求进度,而Node.js的http模块是基于事件回调的异步设计,通过不同的事件来标记请求的各个阶段。
等效实现方案
你需要的「请求完全执行完毕再运行后续代码」的需求,对应XHR的readyState == 4阶段,可以通过监听http请求的对应事件实现:
- 如果仅需要获取响应状态码、响应头(对应XHR的
readyState == 2阶段),直接在response事件回调中处理即可,此时响应头已经完全接收:
const http = require('http'); const request = http.request('你的请求地址', (res) => { // 此处已可以拿到响应状态码,对应XHR readyState 2 if (res.statusCode === 200) { // 响应头相关逻辑写在这里 } });
- 如果需要等整个响应体完全接收、请求彻底完成(完全对应XHR的
readyState == 4阶段),需要额外监听响应对象的end事件,此时所有响应数据都已接收完毕:
const http = require('http'); const request = http.request('你的请求地址', (res) => { let resBody = ''; // 拼接响应数据块 res.on('data', (chunk) => { resBody += chunk; }); // 响应完全接收完成,请求执行完毕 res.on('end', () => { // 你的后续逻辑写在这里即可,不会出现请求未完成就执行的问题 if (res.statusCode === 200) { // 执行业务逻辑 } }); }); // 捕获请求异常 request.on('error', (err) => { console.error('请求出错:', err); }); // 发送请求 request.end();
如果希望用更简洁的async/await语法实现该逻辑,可以自行对http模块做Promise封装,也可以直接使用社区已经封装好的请求类库。
内容的提问来源于stack exchange,提问作者Guy
相关产品推荐
相关产品推荐

