Node.js使用mssql包连接(localdb)\MSSQLLocalDB报实例查找错误怎么办
你的配置存在疏漏,并非mssql包的校验逻辑变更,错误根源是mssql默认会把server字段中反斜杠分隔的内容拆分为独立的服务器地址、实例名分别解析,而(localdb)属于本地特殊实例,无法被当作普通网络域名解析,才会触发ENOTFOUND报错。
修复方案
方式一:拆分实例名配置(通用方案)
修改连接配置,将实例名从server字段中拆分到options的instanceName参数中,同时补充SQL Server连接必需的配置项:
let sql = require('mssql'); sql.connect({ server: '(localdb)', database: 'xxx', options: { trustedConnection: true, instanceName: 'MSSQLLocalDB', // 单独指定实例名 trustServerCertificate: true, // 跳过本地证书校验 enableArithAbort: true // 适配SQL Server默认配置要求 } }, function(err) { if(err) console.log(err); var request = new sql.Request(); request.query('simple query', function(err, recordset) { if(err) console.log(err); res.send(recordset); }) })
方式二:适配Windows本地身份验证(可选,方式一不生效时使用)
如果你的运行环境是Windows系统,且修改配置后仍然报错,可安装Windows专属SQL Server驱动适配本地验证逻辑:
- 先执行安装命令:
npm install msnodesqlv8 - 修改连接配置,指定驱动参数:
let sql = require('mssql/msnodesqlv8'); // 引入适配后的mssql包 sql.connect({ server: '(localdb)\\MSSQLLocalDB', // 此处可直接写完整实例路径 database: 'xxx', options: { trustedConnection: true, trustServerCertificate: true } }, function(err) { // 后续查询逻辑不变 })
内容的提问来源于stack exchange,提问作者jjfm
相关产品推荐
相关产品推荐

