使用Knex.js连接Microsoft SQL Server时遭遇getaddrinfo ENOTFOUND错误的求助
解决Knex.js连接Microsoft SQL Server时的getaddrinfo ENOTFOUND错误
你已经做了不少基础排查(DNS解析、换IP、确认SQL Server可正常访问),但还是卡在地址解析这一步,咱们从MSSQL命名实例的连接配置细节入手,一步步拆解问题:
1. 修正实例名的配置逻辑
你当前把实例名docx拼在服务器名后面(filesrv\\docx),但Knex依赖的tedious驱动对命名实例的处理更推荐单独指定参数,而不是把实例名和服务器名混在一起——这正是导致DNS解析失败的核心原因之一(DNS无法识别带反斜杠的主机名)。试试调整配置结构:
const knex = require('knex')({ client: 'mssql', connection: { server: 'filesrv', // 只保留服务器名/IP地址 user: 'user', password: 'secret', database: 'DX_Matching_DB', // database需放在connection根节点,而非options内 port: 1433, // port同样直接放在connection根节点 options: { instanceName: 'docx', // 单独指定命名实例 encrypt: false, // 内部网络连接可关闭加密,避免额外验证问题 trustServerCertificate: true // 若使用自签证书,开启该选项跳过证书验证 } } });
2. 确认命名实例的实际端口
如果docx是命名实例,默认不会使用1433端口(1433是MSSQL默认实例的固定端口):
- 打开SQL Server配置管理器,找到SQL Server网络配置 → MSQL$DOCX的协议(对应你的命名实例)
- 启用TCP/IP协议,双击打开属性,切换到IP地址标签,查看IPAll下的TCP端口(可能是动态生成的,比如1434或其他数值)
- 将Knex配置里的
port替换为这个实际端口,同时确保Windows防火墙允许该端口的入站连接
如果不想指定固定端口,需要确保SQL Server Browser服务处于运行状态(该服务通过UDP 1434端口解析命名实例的动态端口),且防火墙允许UDP 1434的入站请求。
3. 用IP地址测试的注意事项
当你换成IP地址时,同样不要把实例名拼在IP后面(比如192.168.1.100\\docx),保持server: '192.168.1.100',然后在options.instanceName里指定docx。另外要确认:
- SQL Server配置管理器中,TCP/IP协议已启用对应IP的监听(在TCP/IP属性的IP地址列表中,确保目标IP的已启用为Yes)
4. 验证SQL Server的远程连接权限
- 打开SQL Server Management Studio,右键服务器 → 属性 → 连接,确认「允许远程连接到此服务器」已勾选
- 检查你使用的
user账号:确保它拥有远程连接权限,且能正常访问DX_Matching_DB数据库
5. 跳过Knex直接测试基础连接
为了排除Knex的配置干扰,你可以用tedious驱动写一个极简测试脚本,确认底层连接是否正常:
const { Connection } = require('tedious'); const config = { server: 'filesrv', authentication: { type: 'default', options: { userName: 'user', password: 'secret' } }, options: { instanceName: 'docx', database: 'DX_Matching_DB', port: 1433, // 替换为实际端口 encrypt: false, trustServerCertificate: true } }; const connection = new Connection(config); connection.on('connect', (err) => { if (err) { console.error('连接失败:', err.message); } else { console.log('连接成功!'); } }); connection.connect();
如果这个脚本能成功连接,说明问题出在Knex的配置结构上;如果还是失败,那就是SQL Server的网络配置或防火墙问题。
内容的提问来源于stack exchange,提问作者Tim Vahlbrock
相关产品推荐
相关产品推荐

