Node.js使用mssql查询SQL Server渲染option显示undefined的解决方法
问题产生原因
代码里存在两个核心错误,直接导致取值返回undefined:
- mssql包的查询返回值
result是完整的响应对象,并非直接返回查询到的数据行数组,实际的行数据存储在result.recordset属性中。直接遍历result对象,拿到的是recordsets、output、rowsAffected这类对象自身的属性名,根本不是单行数据。 - 使用了
for...in语法做遍历,该语法的设计用途是遍历对象的可枚举键名,哪怕直接遍历数组,拿到的data也只是数组索引的字符串值(比如"0"、"1"),不是数组里存储的元素对象,自然读不到Pdf_Filename、SKU这类列属性。
可落地修复方案
只需要调整结果取值逻辑和遍历方式即可,修正后的完整代码如下:
const query = () =>{ let output = `` sql.connect(config).then(pool => { return pool.request() .query('SELECT Pdf_Filename, SKU FROM RDCProductLabels WHERE PDF_Filename is not null Order by SKU') }).then(result => { // 取出实际存储查询行的数组 const rowList = result.recordset // 用for...of直接遍历数组元素,拿到每一行的数据对象 for(const data of rowList){ output +=` <option value="${data.Pdf_Filename}"> ${data.SKU} </option> ` } console.log(output) }).catch(err => { console.log(`数据库操作出错 - ${err}`) }); }
额外提示:如果后续遇到同类数据库返回值取值问题,可以先打印result对象确认结构,避免找错数据存储位置;如果担心列名大小写匹配问题,可以在SQL查询时统一给列设置别名,降低大小写不一致导致的取值失败概率,当前问题和列名本身的正确性无关。
内容的提问来源于stack exchange,提问作者Squid
相关产品推荐
相关产品推荐

