NodeJS连接SQL Server传入数据返回undefined的问题该如何解决?
问题修复方案
问题根源
你当前代码的核心问题是同时混用了await异步语法和query方法的回调函数,mssql库的query方法在传入回调参数时,不会返回Promise对象,因此await拿到的result自然为undefined,同时你外层的try/catch也无法捕获回调内部抛出的错误。
修复方案
方案一(推荐):统一使用async/await异步写法
移除query方法的回调参数,直接通过await获取执行结果,代码逻辑更简洁,异常捕获也更统一:
const {sql,poolPromise} = require('../config/winauth paperless') exports.Checkskip = async function(req, res) { try { const pool = await poolPromise; const result = await pool.request() .input('a', sql.VarChar, req.body.TagAlternateKey) .input('b', sql.Int, req.body.ProcessOfProductionKey) .query("execute [wos].[StoredInternalProcessTransactionCheckProcessBeforeReceiving ] @a , @b ") res.json(result.recordset); console.log(result.recordset) }catch (err){ console.log(err) res.status(500).send(err.message) } }
方案二:保留回调写法,移除await
如果需要保留回调逻辑,就去掉query前的await,同时把错误处理逻辑也放到回调内部:
const {sql,poolPromise} = require('../config/winauth paperless') exports.Checkskip = async function(req, res) { try { const pool = await poolPromise; pool.request() .input('a', sql.VarChar, req.body.TagAlternateKey) .input('b', sql.Int, req.body.ProcessOfProductionKey) .query("execute [wos].[StoredInternalProcessTransactionCheckProcessBeforeReceiving ] @a , @b " ,function(err, result) { if (err) { console.log(err) return res.status(500).send(err.message) } res.json(result.recordset); console.log(result.recordset) }) }catch (err){ console.log(err) res.status(500).send(err.message) } }
额外排查提示
如果修改后仍出现undefined,可先打印完整result对象确认返回结构:
- 单结果集存储过程的返回数据存放在
result.recordset字段 - 多结果集存储过程的返回数据存放在
result.recordsets(复数)数组中
内容的提问来源于stack exchange,提问作者Kittiphob Rakyutitham
相关产品推荐
相关产品推荐

