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

Node.js连接SQL Server报错:ReferenceError: recordSet未定义

问题排查与解决

错误原因分析

  1. 配置参数拼写错误:数据库配置对象存在两处拼写错误,直接导致连接配置失效:

    • optiions 应为 options
    • trustedConnettion 应为 trustedConnection
      这些错误会引发数据库连接异常,后续查询逻辑无法正常执行,间接触发recordSet is not defined错误。
  2. 未处理连接错误的后续逻辑:当sql.connect抛出错误时,代码仍会继续执行new sql.Request()和查询操作。此时数据库连接未建立,请求对象无法正常工作,可能导致查询回调的参数无法正确传入,从而出现变量未定义问题。

  3. 潜在作用域问题:若实际运行代码中存在回调外部未定义就使用recordSet的情况,或参数名拼写错误,也会触发该错误。

解决办法

1. 修正配置参数拼写

将配置对象中的错误字段名修正:

var config = {
  user: "USERNAME",
  password: "SIFRE",
  database: "UpShift",
  server: "DESKTOP-EH2NO0D\\SQLEXPRESS",
  driver: "msnodesqlv8",
  options: { // 修正拼写
    trustedConnection: true, // 修正拼写
  },
};

2. 阻断连接错误后的后续逻辑

在sql.connect的错误分支中添加return,避免执行无效的请求操作:

sql.connect(config, function (err) {
  if (err) {
    console.log(err);
    return; // 连接失败时终止后续代码
  }

  var request = new sql.Request();
  request.query("select * from ulogin", function (err, recordSet) {
    if (err) {
      console.log(err);
    } else {
      console.log(recordSet);
    }
  });
});

3. 检查作用域与参数拼写

确保所有使用recordSet的地方都在其声明的作用域内(即查询回调函数内部),且参数名拼写完全一致。

4. 推荐使用async/await写法(更易维护)

回调嵌套写法易出现逻辑混乱,改用Promise风格的async/await可更清晰处理异步逻辑:

const sql = require("mssql/msnodesqlv8");

const config = {
  user: "USERNAME",
  password: "SIFRE",
  database: "UpShift",
  server: "DESKTOP-EH2NO0D\\SQLEXPRESS",
  driver: "msnodesqlv8",
  options: {
    trustedConnection: true,
  },
};

async function queryDatabase() {
  try {
    await sql.connect(config);
    const result = await sql.query("select * from ulogin");
    console.log(result.recordset); // mssql v7+ 中结果存储在recordset属性中
  } catch (err) {
    console.error(err);
  } finally {
    await sql.close(); // 执行完后关闭连接
  }
}

queryDatabase();

内容的提问来源于stack exchange,提问作者NurLife

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:01:44