无法连接SQL Server数据库:Cucumber+Node.js+TypeScript求助
问题描述
尝试连接SQL Server数据库时触发错误,但未获得明确的错误信息。数据库连接代码如下:
import { error } from 'console' import sql from 'mssql' const sqlConfig = { user: process.env.USERNAME, password: process.env.PASSWORD, database: process.env.DBNAME, server: process.env.SERVER, pool: { max: 10, min: 0, idleTimeoutMillis: 30000 }, options: { encrypt: true, // for azure trustServerCertificate: false // change to true for local dev / self-signed certs } } export class DbConnection { static async queryToDb(query: string) { try { // make sure that any items are correctly URL encoded in the connection string //console.log('Executing query: ' + query) await sql.connect(sqlConfig) const result = await sql.query(query) console.dir(result) } catch (err) { throw Error() } } }
运行测试时出现的错误日志:
Error: a BeforeAll hook errored, process exiting: src\hooks\hooks.ts:22:
at Runtime.runTestRunHooks (C:\dev\allocator-frontend-e2e-tests\node_modules@cucumber\cucumber\src\runtime\run_test_run_hooks.ts:32:19)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at Runtime.start (C:\dev\allocator-frontend-e2e-tests\node_modules@cucumber\cucumber\src\runtime\index.ts:103:5)
at runCucumber (C:\dev\allocator-frontend-e2e-tests\node_modules@cucumber\cucumber\src\api\run_cucumber.ts:125:19)
at Cli.run (C:\dev\allocator-frontend-e2e-tests\node_modules@cucumber\cucumber\src\cli\index.ts:82:25)
at Object.run [as default] (C:\dev\allocator-frontend-e2e-tests\node_modules@cucumber\cucumber\src\cli\run.ts:38:14)
caused by: Error:
at Function. (C:\dev\allocator-frontend-e2e-tests\src\helper\db\db-connection.ts:43:23)
at Generator.throw ()
at rejected (C:\dev\allocator-frontend-e2e-tests\src\helper\db\db-connection.ts:6:65)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
排查与解决步骤
1. 修复错误捕获逻辑,获取真实错误信息
当前catch块直接throw Error()完全丢失了原始错误细节,这是核心问题。修改代码:
catch (err) { console.error('数据库操作错误:', err); throw err instanceof Error ? err : new Error(String(err)); }
重新运行测试即可看到具体错误原因,比如认证失败、网络不通等。
2. 验证环境变量加载正确性
- 在代码中添加日志,打印配置信息(注意隐藏密码):
console.log('数据库配置:', { user: process.env.USERNAME, database: process.env.DBNAME, server: process.env.SERVER, passwordLength: process.env.PASSWORD?.length }); - 确认
.env文件是否通过dotenv正确加载,需在代码顶部执行import 'dotenv/config'或require('dotenv').config()。
3. 检查连接配置合理性
- 本地SQL Server或自签名证书服务器:将
options.trustServerCertificate改为true,按需调整encrypt(本地可设为false)。 - 确认
server格式:本地默认实例用localhost或.\SQLEXPRESS;远程服务器需包含IP/域名+端口(非默认1433时,格式为xxx.xxx.xxx.xxx,1434)。 - 验证数据库账号权限:确保账号能访问指定数据库,且拥有查询执行权限。
4. 排查网络与服务器状态
- 测试端口连通性:用
telnet 服务器地址 1433或PowerShell命令Test-NetConnection 服务器地址 -Port 1433检查。 - 确认SQL Server服务运行状态:在服务器服务管理器中查看对应实例的服务是否启动。
- 开启远程连接权限:在SQL Server配置管理器中启用TCP/IP协议,同时防火墙开放对应端口。
5. 检查包版本兼容性
尝试更新mssql到最新稳定版,避免版本兼容问题:
npm install mssql@latest
内容的提问来源于stack exchange,提问作者joanna

