Node.js+Express连接SQL Server遇两类错误,求解决方法
Node.js + Express 连接SQL Server(Windows认证)常见错误解决
错误1:TypeError: sql.Connection is not a constructor
错误含义
直接引用msnodesqlv8库并调用Connection构造函数会触发该错误——msnodesqlv8本身并非独立的连接工具,它是作为mssql库的底层驱动存在的,并没有暴露Connection构造函数。
代码修改方案
通过mssql库调用连接池,并指定msnodesqlv8作为驱动,修改dbConfig.js如下:
const sql = require('mssql'); const config = { database: 'ApiDemoDB', server: '.\\SQLEXPRESS', driver: 'msnodesqlv8', options: { trustedConnection: true // 启用Windows认证 } }; // 创建连接池并返回Promise const poolPromise = new sql.ConnectionPool(config) .connect() .then(pool => { console.log('Connected to MSSQL'); return pool; }) .catch(err => console.log('Database Connection Failed! Bad Config!: ', err)); module.exports = { sql, poolPromise };
关键说明:
- 使用
sql.ConnectionPool(mssql库中连接池的正确构造函数)替代不存在的sql.Connection - 保留
msnodesqlv8作为驱动,确保Windows认证逻辑生效
错误2:ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence)
错误含义
该错误表示程序无法通过localhost:1433端口连接到目标SQL Server实例,常见诱因包括:
- SQLEXPRESS命名实例未监听1433端口
- 配置中同时指定
port和instancename导致冲突 - SQL Server的TCP/IP协议未启用
dbconfig修改及排查步骤
- 调整配置文件
移除port配置(命名实例通过实例名称即可定位,无需固定端口),同时修正instancename为instanceName(mssql库的标准配置项),修改后的dbconfig.js:
const sql = require('mssql'); const dbconfig = { server: 'localhost', database: 'ApiDemoDB', driver: 'msnodesqlv8', options: { enableArithAbort: true, trustedConnection: true, instanceName: 'SQLEXPRESS' } }; module.exports = dbconfig;
同步修改dbconnect.js,使用连接池规范连接:
const sql = require('mssql/msnodesqlv8'); const dbConfig = require('./dbConfig'); // 创建连接池实例 const pool = new sql.ConnectionPool(dbConfig); // 监听连接池错误 pool.on('error', err => { console.log('Database pool error: ', err); }); // 发起连接 const connect = async () => { try { await pool.connect(); console.log('Connected to database: ', dbConfig.server); } catch (err) { console.log('Error while connecting to database: ', err); } }; connect(); module.exports = pool;
- 检查SQL Server服务配置
- 打开SQL Server配置管理器,找到SQL Server网络配置 -> SQLEXPRESS的协议,确保TCP/IP已启用
- 若需固定端口,可在TCP/IP属性中设置端口为1433,之后重启SQL Server服务
内容的提问来源于stack exchange,提问作者Prabir Choudhury
相关产品推荐
相关产品推荐

