如何解决使用 createServer() 时如何获取 node.js 服务器可用的 IP
http-server -S -C cert.pem
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-server
的 source 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 举报,一经查实,本站将立刻删除。