NodeJS连接SQL Server超时崩溃问题求助
Node.js连接SQL Server Express超时问题解决指南
问题详情
启动Node.js服务后,控制台先输出Server running on PORT 3000,但15秒后程序崩溃,抛出错误:
Failed to connect 'LAPTOP-JTDH0LQ5\SQLEXPRESS in 15000ms'
已执行排查步骤:确认验证信息正确、启用TCP/IP协议、核对连接字符串、检查SQL Server运行状态、重启SQL Server及Node.js服务,问题仍未解决。
问题代码
//imports const express = require('express'); const mssql = require('mssql'); const body_parser = require('body-parser'); const app = express(); app.use(body_parser.json()) //connection string const dbConfig = { authentication: "Windows Authentication", username: "LAPTOP-JTDH0LQ5\\Harsh", server: "LAPTOP-JTDH0LQ5\\SQLEXPRESS", database: "crud_form", port: 1433 }; mssql.connect(dbConfig , err => { if (err){ console.log("Error " + err.message); } else{ console.log("Successful Connection!"); } })
针对性排查方案
- 确认SQL Server Express的实际TCP端口:SQL Server Express默认常使用动态端口而非1433。打开SQL Server配置管理器,依次进入
SQL Server网络配置->SQLEXPRESS的协议->TCP/IP,右键选择属性,切换到IP地址标签,查看TCP端口的值。若为动态端口,要么设置固定端口并同步到代码的port参数,要么直接删除代码中的port配置,让驱动自动发现端口。 - 修正Windows身份验证配置:使用Windows身份验证时,无需手动指定
username,改用integratedSecurity参数确保集成身份验证生效,同时添加trustServerCertificate避免证书验证问题,修改后的配置示例:
const dbConfig = { server: "LAPTOP-JTDH0LQ5\\SQLEXPRESS", database: "crud_form", options: { trustServerCertificate: true, integratedSecurity: true } };
- 检查防火墙规则:确保Windows防火墙允许SQL Server使用的端口(1433或实际端口)的入站和出站请求,可临时关闭防火墙测试是否为拦截导致的超时。
- 验证SQL Server服务权限:确认SQL Server (SQLEXPRESS)服务正以有权限访问目标数据库的账户运行,可在服务管理器中查看服务的登录账户,并测试该账户的数据库访问权限。
- 更新mssql依赖包:检查
mssql版本与Node.js版本的兼容性,执行npm install mssql@latest更新到最新稳定版,避免版本不兼容引发的连接问题。
内容的提问来源于stack exchange,提问作者Ashmit Srivastava
相关产品推荐
相关产品推荐

