Node.js连接SQL Server API返回含recordsets的重复JSON问题求助
解决Node.js连接SQL Server API返回冗余JSON结构的问题
问题说明
用Node.js编写连接SQL Server的API时,返回的JSON包含recordsets、recordset等冗余结构,数据还存在重复,即便用JSON.stringify()也无法消除这些问题。
原代码
request.query('select ID as id,DISPLAY_MESSAGE_1 as description from pos where ID=20524', function (err, recordset) { if (err) console.log(err) res.send(recordset); })
当前返回结果
{"recordsets":[{"id":"20524","description":"MERHABA"}],"recordset":[{"id":"20524","description":"MERHABA"}],"output":{},"rowsAffected":[1]}
期望返回结果
{ "id": 20524, "description": "MERHABA" }
解决方案
从查询返回的结果对象里提取实际需要的数据项,并转换id的类型(数据库返回的是字符串类型)即可:
修改后的代码
request.query('select ID as id,DISPLAY_MESSAGE_1 as description from pos where ID=20524', function (err, result) { if (err) { console.log(err); return res.status(500).send({ error: '查询失败' }); } // 提取单个数据项,同时把id转为数字类型 const targetData = result.recordset[0]; if (targetData) { targetData.id = parseInt(targetData.id, 10); res.send(targetData); } else { res.status(404).send({ error: '未找到对应数据' }); } })
说明
- SQL Server的Node.js驱动返回的
result对象自带查询元数据(比如recordsets、rowsAffected),直接返回整个对象就会带上这些冗余内容,我们只需要取recordset数组里的实际数据。 - 因为你的查询是按单个ID筛选,
result.recordset是仅含一个元素的数组,取[0]就能拿到目标对象。 - 数据库返回的
id是字符串格式,通过parseInt()转成数字类型,就能匹配期望的返回格式。
内容的提问来源于stack exchange,提问作者ripboyz
相关产品推荐
相关产品推荐

