微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 createServer() 时如何获取 node.js 服务器可用的 IP

如何解决使用 createServer() 时如何获取 node.js 服务器可用的 IP

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

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而没有添加任何设备...

解决方法

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

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

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

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

,

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

文档: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);
    }
  });
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?