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

如何用Node.js连接MSSQL实例?遇ETIMEOUT超时错误求助

Node.js连接MSSQL Express超时(ETIMEOUT)问题解决

针对你遇到的Failed to connect to localhost\SQLEXPRESS in 15000ms超时问题,结合SSMS能正常连接的情况,核心原因基本是SQL Server Express的TCP/IP协议未启用,或者Node.js连接配置未适配Express实例特性,以下是具体解决步骤:

1. 启用SQL Server Express的TCP/IP协议

  • 打开SQL Server配置管理器(Windows搜索栏直接搜索即可找到)
  • 展开SQL Server网络配置 → 选择SQLEXPRESS的协议
  • 确保TCP/IP状态为启用,未启用则右键点击启用
  • 双击TCP/IP进入属性页,切换到IP地址标签,拉到最底部的IPAll:
    • 清空TCP动态端口的数值,设置TCP端口为1433(固定端口更稳定)
    • 重启SQL Server (SQLEXPRESS)服务(在Windows服务管理器中操作)

2. 修改Node.js连接配置

根据启用的协议,调整连接参数:

方案一:使用TCP端口连接

修改配置,明确指定端口并跳过开发环境SSL验证:

const express = require('express');
const sql = require("mssql");
const app = express();

const config = {
  user: "tester",
  password: "test",
  server: "localhost", // 移除实例名,改用端口指定
  port: 1433, // 对应刚才设置的TCP端口
  database: "TrainingSimulator",
  options: {
    trustServerCertificate: true, // 开发环境跳过SSL证书验证
    enableArithAbort: true // 兼容SQL Server算术终止设置
  }
};

app.get("/", async (req, res) => {
    try {
        await sql.connect(config);
        res.send("DB Connected");
    } catch(err) {
        console.error("连接错误详情:", err);
        res.send(`连接失败:${err.message}`);
    }
});

const port = process.env.PORT || 5000;
app.listen(port, () => {
  console.log(`服务运行在端口:[${port}]`);
});

方案二:使用命名管道连接

若不想启用TCP/IP,可直接用SQL Server命名管道协议,修改server参数为命名管道路径:

const config = {
  user: "tester",
  password: "test",
  server: "\\\\.\\pipe\\SQLEXPRESS\\sql\\query", // 命名管道路径
  database: "TrainingSimulator",
  options: {
    trustServerCertificate: true
  }
};

3. 额外排查点

  • 检查Windows防火墙是否允许1433端口的入站连接,未允许则添加对应规则
  • 确认tester账号拥有TrainingSimulator数据库的访问权限(可在SSMS中验证)
  • 若使用Windows身份验证,删除配置中的user和password,添加options: { trustedConnection: true }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:30:26