Node.js中使用Axios接收大响应数据分块的实现方法
在Node.js中用Axios分块接收大响应数据
要替代https模块的分块接收逻辑,Axios可以通过流式响应实现相同功能,核心是将responseType设置为'stream',然后监听流的data和end事件,和原生https的处理逻辑一致。
实现代码
const axios = require('axios'); const { Buffer } = require('buffer'); async function fetchLargeData() { const chunks = []; try { const response = await axios({ method: 'POST', // 和原请求方法保持一致 url: '你的目标请求URL', // 替换为实际请求地址 data: postData, // 原请求中的postData参数 responseType: 'stream', // 关键配置:开启流式响应 // 可添加原options中的其他配置,比如自定义请求头 headers: { // 示例:'Content-Type': 'application/json' } }); // 打印状态码与响应头,对应原代码的逻辑 console.log('statusCode:', response.status); console.log('headers:', response.headers); // 监听分块数据,对应原res.on('data') response.data.on('data', (d) => { chunks.push(d); }); // 监听数据接收完成,对应原res.on('end') response.data.on('end', () => { const result = JSON.parse(Buffer.concat(chunks).toString()); console.log(result); }); // 监听流自身的错误 response.data.on('error', (e) => { console.error(e); }); } catch (e) { // 处理请求级别的错误,比如连接失败、状态码异常等 console.error(e); } } fetchLargeData();
关键说明
responseType: 'stream':让Axios返回可读流对象,而非直接将整个响应体加载到内存,完美适配大体积数据场景- 流事件逻辑:
response.data就是可读流,监听data事件收集分块、end事件完成最终拼接,和原生https的处理逻辑完全对应 - 错误处理:需同时处理流自身的错误(
response.data.on('error'))和Axios请求级别的错误(try-catch块)
内容的提问来源于stack exchange,提问作者Vishal Gupta
相关产品推荐
相关产品推荐

