NodeJS处理MSSQL查询结果:如何生成JSON数组并写入文件
解决思路
方案一:流式模式下收集数据生成JSON数组
你开启了stream: true后,查询结果会通过row事件逐行返回,只需先把所有行数据收集到数组中,等全部数据接收完成后,再将整个数组转为JSON字符串写入文件即可:
修改后的代码示例:
const sql = require('mssql'); const fs = require('fs'); const config = { // 你的数据库配置 }; // 初始化数组存储所有行数据 let rows = []; sql.connect(config, err => { if (err) { console.error('数据库连接失败:', err); return; } const request = new sql.Request(); request.stream = true; request.query(fs.readFileSync('./new-query.sql').toString()); // 逐行收集数据 request.on('row', row => { rows.push(row); }); request.on('error', err => { console.error('查询出错:', err); sql.close(); }); // 所有数据接收完成后,生成JSON数组并写入文件 request.on('done', () => { const jsonArray = JSON.stringify(rows); fs.writeFile('./result.json', jsonArray, 'utf8', err => { if (err) { console.error('写入文件失败:', err); } else { console.log('JSON数组已成功写入文件'); } sql.close(); }); }); });
方案二:关闭流式模式直接获取完整结果集
如果查询返回的数据量不大,可以关闭stream: true,直接通过Promise获取完整结果集,代码会更简洁:
const sql = require('mssql'); const fs = require('fs').promises; // 使用Promise版本的fs处理异步操作 const config = { // 你的数据库配置 }; sql.connect(config) .then(pool => { return pool.request().query(fs.readFileSync('./new-query.sql').toString()); }) .then(result => { // result.recordset就是查询结果的对象数组 const jsonArray = JSON.stringify(result.recordset); return fs.writeFile('./result.json', jsonArray, 'utf8'); }) .then(() => { console.log('JSON数组已成功写入文件'); sql.close(); }) .catch(err => { console.error('出错:', err); sql.close(); });
注意事项
- 确保数据库配置(服务器地址、库名、账号密码等)正确无误
- 若处理大数量级数据,优先用方案一的流式模式,避免内存占用过高
- 写入文件时要处理异步错误,防止遗漏异常情况
内容的提问来源于stack exchange,提问作者Huegott
相关产品推荐
相关产品推荐

