node npm run serve在windows操作系统下跑不起来

我下载了钉钉的todo示例项目
git地址:https://github.com/open-dingt...
然后到todo-server目录下执行 npm run serve想启动服务,但是报如图错误,windows难道不支持nodejs吗?但是我启动别的nodejs项目时又不报这个错:win32"os.networkInterface()" dose not support
图片描述

阅读 6.9k
3 个回答

这个是你的系统不支持nodejs调用网卡信息,部分window系统是有这个问题。
其他nodejs项目是可能没有调用这个接口。

你想多了,只是调用的那个方法不支持windows而已

请看api官方文档,win平台不支持的会在文档里说明的。没说明的是夸平台的。

不能跨平台的process.getgid

等我吃完饭再看看源码。


上文原文, 原文未动, 刚刚吃完晚饭. 先说原因再吐槽.

原因

项目坐着用的Mac, 网卡名称和Windows琳琅满目的网络适配器名称不一致, 导致项目无法找到理想的网卡, 主动报错的. 改源代码就好了. 其实找到一个支持IPv4的网卡就可以.

解决办法

将todo-server/app/middleware/helper.js中的for替换

源代码

      for(;i<os.networkInterfaces().en0.length;i++){
          if(os.networkInterfaces().en0[i].family=='IPv4'){
              IPv4=os.networkInterfaces().en0[i].address;
              break;
          }
      }

修改为

    const ifaces = os.networkInterfaces()
    for (;i < ifaces.length;i++) {
      const iface = ifaces[i]
      if (iface.family == 'IPv4') {
        IPv4 = iface.address
        break
      }
    }

吐槽

截图明显是在日志输出异常, 如果是Node抛出的异常会更详细并且node会终止运行.

  try {
    for (;i < os.networkInterfaces().en0.length;i++) {
      if (os.networkInterfaces().en0[i].family == 'IPv4') {
        IPv4 = os.networkInterfaces().en0[i].address
        break
      }
    }
    logger.info('IPv4', IPv4, {timestamp: Date.now(), pid: process.pid})
    logger.info('PORT', PORT, {timestamp: Date.now(), pid: process.pid})
    logger.info('access your browser address', IPv4 + ':' + 3000, {timestamp: Date.now(), pid: process.pid})
  } catch(e) {
    logger.log('error', os.platform() + ' "os.networkInterfaces()" does not support')
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题