Node.js连接SQL Server超时问题求助(附代码及错误信息)
你的Node.js连接代码如下:
const sql = require('mssql') const sqlConfig = { user: 'sa', password: '12345678', database: 'mementoDB', server: 'LAPTOPSZKOLA\\SQLEXPRESS', pool: { max: 10, min: 0, idleTimeoutMillis: 30000 }, options: { encrypt: false, trustServerCertificate: true } } const func = async () => { try { await sql.connect(sqlConfig); const result = await sql.query(`select * from People`); console.dir(result); } catch (err) { console.log(err); } } func();
运行时出现的超时错误:
ConnectionError: Failed to connect to LAPTOPSZKOLA\SQLEXPRESS in 15000ms
at C:\Users\creat\OneDrive\Pulpit\jsapps\tut2\node_modules\mssql\lib\tedious\connection-pool.js:85:17
at Connection.onConnect (C:\Users\creat\OneDrive\Pulpit\jsapps\tut2\node_modules\tedious\lib\connection.js:838:9)
at Object.onceWrapper (node:events:629:26)
at Connection.emit (node:events:514:28)
at Connection.emit (C:\Users\creat\OneDrive\Pulpit\jsapps\tut2\node_modules\tedious\lib\connection.js:959:18)
at Connection.connectTimeout (C:\Users\creat\OneDrive\Pulpit\jsapps\tut2\node_modules\tedious\lib\connection.js:1209:10)
at Timeout._onTimeout (C:\Users\creat\OneDrive\Pulpit\jsapps\tut2\node_modules\tedious\lib\connection.js:1154:12)
at listOnTimeout (node:internal/timers:573:17)
at process.processTimers (node:internal/timers:514:7) {
code: 'ETIMEOUT',
originalError: ConnectionError: Failed to connect to LAPTOPSZKOLA\SQLEXPRESS in 15000ms
at Connection.connectTimeout (C:\Users\creat\OneDrive\Pulpit\jsapps\tut2\node_modules\tedious\lib\connection.js:1209:26)
at Timeout._onTimeout (C:\Users\creat\OneDrive\Pulpit\jsapps\tut2\node_modules\tedious\lib\connection.js:1154:12)
at listOnTimeout (node:internal/timers:573:17)
at process.processTimers (node:internal/timers:514:7) {
code: 'ETIMEOUT'
}
}
针对这个超时问题,按以下步骤排查:
- 确认SQL Server服务状态:打开
services.msc,找到「SQL Server (SQLEXPRESS)」,确保服务处于运行状态,未启动则右键启动。 - 启用TCP/IP协议:打开SQL Server配置管理器,依次展开「SQL Server网络配置」→「SQLEXPRESS的协议」,右键点击TCP/IP选择启用;双击TCP/IP进入设置,切换到「IP地址」标签拉至底部,在「IPAll」栏确认TCP端口为1433(自定义端口则记好对应值),之后重启SQL Server服务。
- 修改连接地址:将配置中的
server参数替换为localhost\SQLEXPRESS或127.0.0.1\SQLEXPRESS,避免机器名解析异常;如果用了非默认端口,格式改为127.0.0.1,端口号(比如127.0.0.1,1434)。 - 检查防火墙设置:临时关闭Windows防火墙测试是否能连接,若能则需在防火墙中添加SQL Server端口的入站规则;或者直接放行SQL Server程序。
- 验证身份验证配置:在SSMS中右键服务器→属性→安全性,确认选择「SQL Server和Windows身份验证模式」;同时检查sa账号未被禁用,密码与代码中一致(可在SSMS中用sa账号登录验证)。
- 延长连接超时时间:在
sqlConfig中添加connectionTimeout: 30000(设置为30秒),避免因初始化慢导致超时:const sqlConfig = { user: 'sa', password: '12345678', database: 'mementoDB', server: '127.0.0.1\\SQLEXPRESS', connectionTimeout: 30000, // 新增超时配置 pool: { max: 10, min: 0, idleTimeoutMillis: 30000 }, options: { encrypt: false, trustServerCertificate: true } }
内容的提问来源于stack exchange,提问作者Creatos

