Node.js无法连接SQL Server:握手超时问题求助
Node.js连接SQL Server失败的解决方案
核心问题
你错误使用了mysql npm包连接SQL Server——这个包仅适用于MySQL数据库,连接SQL Server需要使用专门的驱动包,比如mssql。
修复步骤
安装SQL Server专用驱动
在项目目录执行:npm install mssql替换为适配SQL Server的代码
const sql = require('mssql'); // 连接配置 const poolConfig = { user: 'TEST', password: 'TEST', server: 'localhost', // 若为命名实例,需写成「localhost\\实例名」,比如localhost\\SQLEXPRESS database: 'TestDB', port: 3306, // 你设置的SQL Server TCP端口 options: { encrypt: false, // 本地连接无需加密 trustServerCertificate: true // 本地环境跳过证书验证 }, pool: { max: 10, min: 0, idleTimeoutMillis: 30000 } }; // 建立连接并执行查询 const pool = new sql.ConnectionPool(poolConfig); pool.connect() .then(() => pool.query('SELECT * FROM dbo.TestPlans')) .then(result => { console.log(result.recordset); pool.close(); }) .catch(err => { console.error('连接或查询出错:', err); pool.close(); });
额外排查点
- 确认SQL Server服务处于运行状态,且监听了3306端口(可通过命令
netstat -ano | findstr :3306查看端口占用) - 若使用SQL Server命名实例,需开启SQL Browser服务,且连接配置中
server字段要包含实例名 - 确保账号
TEST对TestDB数据库拥有SELECT权限 - 检查防火墙规则,允许Node.js进程访问SQL Server的端口
原问题描述
我使用的Node.js代码如下:
const { createPool } = require('mysql'); const pool = createPool({ host: "localhost", user: "TEST", port: 3306, password: "TEST", database: "TestDB", connectionLimit: 10 }); pool.query(`select * from dbo.TestPlans`, function(err, result, fields) { if (err) { return console.log(err); } return console.log(result); });
运行后报错:Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
我已执行以下操作:
- 在SQL Server管理器中启用TCP/IP
- 在SQL Server管理器中手动设置TCP端口为3306
- 通过Microsoft SQL Server Management Studio启用「SQL Server和Windows身份验证模式」
- 确认登录账号「TEST」可通过「SQL Server身份验证」登录Microsoft SQL Server Management Studio
修改端口号后会出现另一个错误:Error: connect ECONNREFUSED 127.0.0.1:[修改后的端口号]
使用w3schools上的首个示例代码时程序会挂起。
目前我不确定还需检查哪些配置,请问是否需要修改SQL数据库的某些配置以允许Node.js连接?
内容的提问来源于stack exchange,提问作者Nivert9
相关产品推荐
相关产品推荐

