Node.js连接SQL Server(SQLEXPRESS)失败问题求助
解决Node.js(Express)连接SQL Server Express超时问题
针对你遇到的连接超时(ETIMEOUT)及后续的TypeError问题,以下是针对性的排查和修复方案:
1. 修正端口配置,或开启SQL Server Browser服务
SQL Server Express默认使用动态端口而非固定的1433,你代码中硬写port:1433可能与实际端口不符:
- 方案一:去掉
port配置项,让mssql通过实例名自动解析端口。但需确保SQL Server Browser服务已开启:- 打开服务管理器(Win+R输入
services.msc) - 找到
SQL Server Browser服务,设置为自动启动并启动服务
- 打开服务管理器(Win+R输入
- 方案二:手动指定正确端口:
- 打开SSMS,连接到
DESKTOP-877085U\SQLEXPRESS - 右键实例 → 属性 → 连接 → 查看"TCP/IP"的当前端口
- 将代码中的
port值改为该实际端口
- 打开SSMS,连接到
2. 修复连接方法的错误处理逻辑
你的getConnection方法在捕获错误后仅打印日志,未抛出错误或返回有效对象,导致后续调用request时因undefined报错。修改代码如下:
const mssql = require('mssql'); const serviceName = 'DESKTOP-877085U\\SQLEXPRESS'; console.log(serviceName); class DBConnection { async getConnection() { try { return await mssql.connect({ user: 'mj', password: 'mj', server: serviceName, database: 'DemoDb', // 若使用动态端口则注释port,若用固定端口则填写正确值 // port: 1433, trustServerCertificate: true, }); } catch(error) { console.error('连接失败:', error); // 重新抛出错误,让调用方感知连接失败 throw error; } } } module.exports = new DBConnection();
3. 确认认证方式一致性
确保SSMS连接时使用的是SQL Server认证(而非Windows认证):
- 若SSMS用的是Windows认证,需修改连接配置为Windows集成认证:
await mssql.connect({ server: serviceName, database: 'DemoDb', trustServerCertificate: true, integratedSecurity: true // 启用Windows认证 });
4. 额外排查点
- 检查防火墙:确保本地防火墙允许Node.js程序访问SQL Server所在端口
- 验证实例名:确认
serviceName中的实例名与SSMS连接时完全一致(注意转义符\\是正确的)
内容的提问来源于stack exchange,提问作者mo7amed178
相关产品推荐
相关产品推荐

