You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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服务已开启:
    1. 打开服务管理器(Win+R输入services.msc)
    2. 找到SQL Server Browser服务,设置为自动启动并启动服务
  • 方案二:手动指定正确端口:
    1. 打开SSMS,连接到DESKTOP-877085U\SQLEXPRESS
    2. 右键实例 → 属性 → 连接 → 查看"TCP/IP"的当前端口
    3. 将代码中的port值改为该实际端口

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 18:46:02