Node.js应用连接SQL Server无控制台输出且无报错如何排查?
问题原因梳理
- 访问地址端口错误:服务监听端口是3000,你填写的访问地址是
localhost:300/admins/,少了一位0,正确访问地址应为localhost:3000/admins/ - 路由内异步函数仅声明未执行:你在
/admins路由里定义了async匿名函数,但没有触发调用,内部的数据库连接、查询逻辑完全不会运行,自然没有任何输出 - 配置变量名引用错误:你定义的数据库配置变量名为
sqlConfig,但连接时写的是sql.ConnectionPool(config),找不到config变量,就算函数执行也会直接报错 - 响应逻辑顺序错误:你在异步函数外直接执行了
res.render,就算异步逻辑跑了,也会和写入响应的逻辑冲突 - 响应方法使用错误:
res._write是Express内部方法不建议直接调用,且mssql的查询返回结果中recordset属性才是实际查询到的数据集,不能直接把整个result对象写入响应 - 连接管理逻辑错误:使用连接池的场景下不需要每次请求都关闭全局sql连接,会影响后续请求的连接复用
修正后代码
仅需替换原/admins路由的代码即可:
// 直接把路由回调设为async函数,不需要额外嵌套匿名函数 app.get('/admins', async function (req, res) { try { // 引用正确的配置变量名sqlConfig const pool = await sql.ConnectionPool(sqlConfig); const queryResult = await pool.query`select name from tbl_info_p_admin`; // 打印实际查询到的数据集 console.log('查询结果:', queryResult.recordset); // 可以把查询结果传给模板渲染 res.render('./admin/masters', { title: 'ADMIN', adminList: queryResult.recordset }); } catch (err) { console.log('数据库操作报错:', err); res.status(500).send('服务器内部错误'); } });
额外检查项
- 确认
mssql包已经正确安装,执行npm list mssql检查依赖存在 - 确认SQL Server启用了TCP/IP连接,端口和配置里的port参数一致,且没有被防火墙拦截
- 确认配置里的数据库账号、密码、库名完全正确,和你在Visual Studio里用的配置一致
内容的提问来源于stack exchange,提问作者Sidhartha Bhowmik
相关产品推荐
相关产品推荐

