Node.js中通过HTTPS获取XLSX文件并直接读取数据的实现方案
Node.js 直接读取API返回的XLSX文件数据
原始代码
const https = require('https'); var postData = JSON.stringify({ 'msg' : 'Hello World!' }); let url; url = "someurl2228.com";// 占位符,已移除真实地址 var options = { hostname: url, path: '/file/download/b8d61eff5314ac1ac982e5dbb9630f83', method: 'GET', headers: {myheader:"somedata"} }; var req = https.request(options, (res) => { console.log('statusCode:', res.statusCode); console.log('headers:', res.headers); res.on('data', (d) => { process.stdout.write(d); }); res.on('end',()=>{ console.log('********************END********'); }); }); req.on('error', (e) => { console.error(e); }); req.write(postData); req.end();
注:上述代码中的URL为占位符,已移除真实地址。
问题描述
我在Node.js中使用https模块调用外部REST API,该API会返回一个XLSX文件。希望无需保存文件就能直接读取其中的数据,用于后续业务操作。
用Postman调用该API时,点击「Send」按钮会在响应面板中看到Unicode字符;点击「Send and Download」按钮则可下载保存XLSX文件。目前我的代码已能获取到类似Postman「Send」返回的Unicode内容,但不知后续如何处理以读取XLSX文件中的数据。
解决方案
要直接读取XLSX文件数据,需先收集响应的二进制数据,再用专用库解析,步骤如下:
1. 安装XLSX解析库
使用SheetJS的xlsx包解析二进制数据,执行安装命令:
npm install xlsx
2. 修改代码收集并解析二进制数据
XLSX是二进制格式,不能直接用字符串处理,需要把响应的data片段(Buffer类型)收集起来,合并成完整的Buffer后再解析。另外注意:你的代码用GET请求却写入了postData,GET请求通常不需要请求体,建议根据API实际要求调整,若API确实需要则保留。
修改后的代码:
const https = require('https'); const XLSX = require('xlsx'); // 若API不需要POST数据,可删除以下两行 const postData = JSON.stringify({ 'msg': 'Hello World!' }); const url = "someurl2228.com"; // 替换为真实地址 const options = { hostname: url, path: '/file/download/b8d61eff5314ac1ac982e5dbb9630f83', method: 'GET', headers: { myheader: "somedata" } }; const req = https.request(options, (res) => { console.log('statusCode:', res.statusCode); console.log('headers:', res.headers); // 收集响应的二进制数据 const chunks = []; res.on('data', (chunk) => { chunks.push(chunk); }); res.on('end', () => { // 合并所有chunk为完整的Buffer const buffer = Buffer.concat(chunks); // 解析XLSX文件 const workbook = XLSX.read(buffer, { type: 'buffer' }); // 获取第一个工作表的数据(可根据实际表名调整) const firstSheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[firstSheetName]; // 转换为JSON格式,方便业务处理 const data = XLSX.utils.sheet_to_json(worksheet); console.log('解析出的Excel数据:', data); console.log('********************END********'); }); }); req.on('error', (e) => { console.error(e); }); // 若API不需要POST数据,可删除以下两行 req.write(postData); req.end();
3. 后续业务处理
解析得到的data是JSON数组,每个元素对应Excel中的一行数据,可直接用于后续业务逻辑(如数据校验、入库等)。
内容的提问来源于stack exchange,提问作者Vishal Gupta
相关产品推荐
相关产品推荐

