Node.js项目如何配置服务器本地IP?获取网卡IP报TypeError如何解决?
报错原因
你遇到的TypeError: Cannot read property '1' of undefined错误是因为os.networkInterfaces()返回的网络接口列表里不存在Ethernet这个属性,常见诱因有3个:
- 不同操作系统的网卡命名规则不同:Windows系统可能叫
以太网,Mac/Linux系统可能叫en0、eth0、wlan0,如果你的设备用的是WiFi连接,也不会出现Ethernet网卡 - 就算存在对应网卡,数组索引也不一定是
1,部分设备第一个有效IP的索引是0 - 你的代码里还漏了
fs模块的引入,后续调用fs.existsSync、fs.mkdirSync时也会抛出未定义报错
修复方案
替换硬编码取IP的逻辑,写通用方法自动获取本机IPv4内网IP
把原来第10到12行的代码替换为以下内容:
const os = require("os"); // 引入缺失的fs模块 const fs = require("fs"); // 通用获取本机IPv4内网IP方法 function getLocalIp() { const interfaces = os.networkInterfaces(); for (const interfaceName of Object.keys(interfaces)) { for (const interfaceInfo of interfaces[interfaceName]) { // 过滤回环地址、IPv6地址,仅取可用的内网IPv4 if (interfaceInfo.family === 'IPv4' && !interfaceInfo.internal) { return interfaceInfo.address; } } } // 取不到有效IP时默认用本地回环地址兜底 return '127.0.0.1'; } const ip = getLocalIp();
可选优化
如果你的服务需要支持同局域网其他设备访问,可以直接把app.listen(process.env.PORT, ip)里的ip参数改为0.0.0.0,这样服务会自动监听所有可用网卡接口,无需手动获取IP。
内容的提问来源于stack exchange,提问作者Konnect Holdings LLC
相关产品推荐
相关产品推荐

