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

使用Objection.js/Knex连接LocalDB\MSSQLLocalDB失败求助

问题

在使用Objection.js/Knex作为数据层的Node.js应用中,尝试连接(LocalDB)\MSSQLLocalDB实例时,数据库迁移连接失败,但通过SSMS可以正常连接。

当前Knexfile.js配置如下:

module.exports = {
    development: {
        client: 'mssql',
        useNullAsDefault: true,
        connection: {
            server: '(LocalDB)\\MSSQLLocalDB',
            user: 'localadmin',
            password: 'password$',
            database: 'database'
        },
        migrations: {
            directory: './migrations',
            tableName: 'knex_migrations'
        },
        seeds: {
            directory: './seeds'
        },
        ...knexSnakeCaseMappers()
    }
};

运行迁移时出现错误:

Failed to connect to (LocalDB)\MSSQLLocalDB:1433 - getaddrinfo ENOTFOUND (LocalDB)\MSSQLLocalDB
Error: Failed to connect to (LocalDB)\MSSQLLocalDB:1433 - getaddrinfo ENOTFOUND (LocalDB)\MSSQLLocalDB
    at Connection.socketError (D:\Code\backend\node_modules\tedious\lib\connection.js:1393:28)
    at D:\Code\backend\node_modules\tedious\lib\connection.js:1153:21
    at GetAddrInfoReqWrap.callback (D:\Code\backend\node_modules\tedious\lib\connector.js:195:16)
    at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:77:17)

怀疑是SQL Express的TCP/IP设置问题,但找不到简便修改方式,询问Knexfile中是否有可实现SQL Express数据库连接的设置。

解决方案

LocalDB是SQL Server的轻量级版本,默认不通过TCP/IP端口1433通信,而是使用命名管道或共享内存。Knex依赖的tedious驱动需要特殊配置才能连接LocalDB,无需修改TCP/IP设置,直接调整Knex连接配置即可:

  • 添加options配置项,指定连接方式
    在connection对象中加入options,明确实例名称并关闭加密(LocalDB通常不需要加密):

    connection: {
        server: '(LocalDB)\\MSSQLLocalDB',
        user: 'localadmin',
        password: 'password$',
        database: 'database',
        options: {
            instanceName: 'MSSQLLocalDB',
            encrypt: false
        }
    }
    
  • 使用LocalDB的命名管道路径(备选方案)
    如果上述配置仍失败,可直接指定LocalDB的命名管道地址。先通过命令行获取管道路径:

    sqllocaldb info MSSQLLocalDB
    

    找到类似np:\\.\pipe\LOCALDB#XXXXXX\tsql\query的管道地址,替换server字段(注意路径中的反斜杠需要双重转义):

    connection: {
        server: 'np:\\\\.\\pipe\\LOCALDB#XXXXXX\\tsql\\query',
        user: 'localadmin',
        password: 'password$',
        database: 'database',
        options: {
            encrypt: false
        }
    }
    
  • 验证Windows身份验证(如果适用)
    若你在SSMS中使用Windows身份验证而非SQL账号,可移除user和password,添加NTLM身份验证配置:

    connection: {
        server: '(LocalDB)\\MSSQLLocalDB',
        database: 'database',
        options: {
            instanceName: 'MSSQLLocalDB',
            encrypt: false,
            trustServerCertificate: true
        },
        authentication: {
            type: 'ntlm'
        }
    }
    

内容的提问来源于stack exchange,提问作者A. Hasemeyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:54:31