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

Node.js使用mssql连接SQL Server超时问题求助

解决Node.js mssql连接超时问题

针对你遇到的两个同配置项目一个连接SQL Server超时的问题,以下是具体排查和修复方案:

1. 验证环境变量的准确性

虽然你提到用了相同凭证,但务必确认出问题的项目中环境变量的实际值是否正确:

  • 检查DB_PORT是否为数字类型(mssql要求port是number,若为字符串会导致连接失败)
  • 在创建连接池前添加日志打印配置,对比正常项目的输出:
console.log('实际SQL配置:', JSON.stringify(sqlConfig, null, 2));
const pool = new sql.ConnectionPool(sqlConfig);

2. 延长连接超时时间

默认15000ms的超时可能不足以应对当前项目的网络环境,在sqlConfig的options中增加超时设置:

const sqlConfig = {
  // ...原有配置
  options: {
    trustServerCertificate: true,
    connectTimeout: 30000 // 延长至30秒
  },
};

3. 修复未处理的Promise拒绝

报错中的未捕获Promise拒绝会掩盖真实错误,且可能导致进程异常,完善错误处理逻辑:

// 连接池连接时捕获错误
const poolConnect = pool.connect().catch(err => {
  console.error('连接池初始化失败:', err);
  throw err;
});

// 查询方法添加错误捕获
export const runQuery = async (query: string) => {
  try {
    await poolConnect;
    const request = pool.request();
    const result = await request.query(query);
    return result?.recordset || [];
  } catch (err) {
    console.error('查询执行失败:', err);
    throw err; // 或根据业务需求处理错误
  }
};

4. 统一Tedious依赖版本

mssql依赖tedious驱动,即使mssql版本一致,不同项目可能因为lockfile差异安装了不同版本的tedious:

  • 对比两个项目中node_modules/tedious/package.json的版本号
  • 在出问题的项目package.json中锁定tedious版本(使用正常项目的版本):
"resolutions": {
  "tedious": "11.0.0" // 替换为正常项目的tedious版本
}

执行npm install重新安装依赖。

5. 增强连接池错误监听

当前的错误监听仅打印日志,可优化为更严谨的处理逻辑,避免连接池异常导致后续失败:

pool.on("error", (err) => {
  console.error('连接池错误:', err);
  // 可选:根据业务场景添加重新连接逻辑
});

6. 排查网络连通性

若以上方案无效,需确认项目所在服务器与SQL Server的网络连通性:

# 使用telnet测试端口
telnet your-server-ip your-db-port

# 或用nc工具
nc -zv your-server-ip your-db-port

若连接失败,说明是防火墙、安全组或路由配置问题,需排查网络策略。

内容的提问来源于stack exchange,提问作者fcorseb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:27:15