You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:24:02