【问题标题】:How to get node.js server available IPs when using createServer()使用 createServer() 时如何获取 node.js 服务器可用的 IP
【发布时间】:2021-08-06 03:54:36
【问题描述】:

当我使用以下方式启动一个简单的服务器时:

http-server -S -C cert.pem

我得到了一个可用 IP 的列表,我可以选择一个来连接:

Starting up http-server, serving ./ through https
Available on:
  https://192.168.1.2:8080
  https://169.254.187.206:8080
  https://169.254.74.61:8080
  https://127.0.0.1:8080
Hit CTRL-C to stop the server

如何在使用 createServer() 时获得相同的列表?

我试过这个来获取一个地址:

var server = https.createServer(options, function(request, response) {
  var uri = url.parse(request.url).pathname, 
      filename = path.join(process.cwd(), uri);
  
  fs.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, { "Content-Type": "text/plain" });
      response.write("404 Not Found\n");
      response.end();
      return;
    }
 
    if (fs.statSync(filename).isDirectory()) 
      filename += '/index.html';
 
    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }
      
      var mimeType = mimeTypes[filename.split('.').pop()];
      
      if (!mimeType) {
        mimeType = 'text/plain';
      }
      
      response.writeHead(200, { "Content-Type": mimeType });
      response.write(file, "binary");
      response.end();
    });
  });
    
}).listen(parseInt(port, 10));
    
var ip = server.address();
    
console.log("\n\n Static file server running at:\n address: " + ip.address + "\n family: " + ip.family + "\n port: " + ip.port + "\n\n Hit CTRL+C to stop the server");

我得到了:

Static file server running at:
address: undefined
family: IPv6
port: 8080

Hit CTRL+C to stop the server

今天我花了一个小时试图弄清楚为什么我不能再通过 WIFI 连接到我的本地服务器。原来,不知何故,我使用的地址 https://192.168.1.2:8080 已更改为 https://192.168.1.3:8080 而没有添加任何设备...

【问题讨论】:

    标签: javascript node.js https ip localserver


    【解决方案1】:

    我没有足够的声誉发表评论,所以我把它放在这里我认为可以帮助你。

    首先,您应该为您的机器分配一个静态 ip,您可以:

    • 在您的计算机中定义一个 IP,而不是依赖路由器的 DHCP 服务
    • 将您的 DHCP(可能在您的 routeur 配置中)配置为始终为您提供相同的 IP 地址(静态 DHCP)

    然后,当您使用 listen() 时,您可以将固定 ip 设置为:listen(8080, 192.168.1.2)

    【讨论】:

    • 很有趣,但我只是想起了一种更简单、侵入性更小的方法:使用简单的 node.js 服务器列出的第二个地址,它永远不会像我发现的那样改变(即使我发现第一个地址也会改变)断开从 PC 到路由器的 LAN 电缆)-我现在要做,但我仍然很好奇如何获得该 IP 列表。
    • 你可以看一下上面的ip列表:1270.0.1,永远不会改变,它是主机的本地链接,169.xx.xx.xx的ip是DHCP客户端时自动生成的地址计算机找不到/获取IP,并且192.168.1.2通过DHCP影响到您的计算机,请使用静态DHCP修复此问题
    【解决方案2】:

    您可以从os 模块获取所有使用networkInterfaces() 地址的网络接口。

    文档:https://nodejs.org/api/os.html#os_os_networkinterfaces

    如果您检查http-serversource code,它正在做这样的事情:

    var os = require('os');
    var ifaces = os.networkInterfaces();
    
    Object.keys(ifaces).forEach(function (dev) {
      ifaces[dev].forEach(function (details) {
        if (details.family === 'IPv4') {
          console.log(details.address);
        }
      });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-06
      • 2011-12-16
      • 1970-01-01
      • 2010-11-16
      • 2014-07-03
      • 2011-02-07
      • 1970-01-01
      • 2011-01-21
      相关资源
      最近更新 更多