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

无法连接SQL Server数据库:Cucumber+Node.js+TypeScript求助

SQL Server连接无明确错误提示的排查方案

问题描述

尝试连接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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:07:07