Node.js连接SQL Server报错:ReferenceError: recordSet未定义
问题排查与解决
错误原因分析
配置参数拼写错误:数据库配置对象存在两处拼写错误,直接导致连接配置失效:
optiions应为optionstrustedConnettion应为trustedConnection
这些错误会引发数据库连接异常,后续查询逻辑无法正常执行,间接触发recordSet is not defined错误。
未处理连接错误的后续逻辑:当
sql.connect抛出错误时,代码仍会继续执行new sql.Request()和查询操作。此时数据库连接未建立,请求对象无法正常工作,可能导致查询回调的参数无法正确传入,从而出现变量未定义问题。潜在作用域问题:若实际运行代码中存在回调外部未定义就使用
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
相关产品推荐
相关产品推荐

