使用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
相关产品推荐
相关产品推荐

