如何用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
相关产品推荐
相关产品推荐

