为什么最新版本的nodejs(v5.10.1)无法再获取我的主机地址?
快递代码:
var express = require('express');
var app = express();
// respond with "Hello World!" on the homepage
app.get('/', function (req, res) {
res.send('Hello World!');
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log(server.address());
console.log('Example app listening at http://%s:%s', host, port);
});
结果:
{ address: '::', family: 'IPv6', port: 3000 }
Example app listening at http://:::3000
应该是:
http://127.0.0.1
我有什么想法可以解决这个问题吗?
我在Linux上。
答案 0 :(得分:1)
实际上,也许你会看到像
这样的东西:80
然后
:: 80
实际上这个模式有这样的模式:
主机:端口 IPv4
host :: port IPv6
127.0.0.1:80表示使用IPv4,在端口80中侦听127.0.0.1
:80表示使用IPv4,侦听端口80中的所有地址
127.0.0.1::80表示使用IPv6,在端口80中侦听127.0.0.1
等等。
所以,:: 3000意味着在端口3000中监听IPv6
这些配置是在这些变量
下完成的var host = server.address().address;
var port = server.address().port;
您可以将这些变量的值更改为“127.0.0.1”和“80”并查看会发生什么,但很可能您的计算机仍然在那里使用IPv6,如果您想要为您的计算机更改为IPv4,请更改在以下位置设置您的机器:
Windows :控制面板 - >网络和共享中心 - > (您的网络) - >属性 - >设置IPv4
Linux :我没有linux机器来测试这个,但语法应该是使用ifconfig或ipconfig取决于你的linux,请参考类似https://unix.stackexchange.com/questions/34093/static-ipv4-ipv6-configuration-on-centos-6-2
的内容Mac :我也没有mac机,应该和linux一样,所以也尝试做同样的事情
答案 1 :(得分:0)
我有同样的问题,我像数组一样解决了这个问题:
server.address()[“端口”]
这里有个例子:
export const onError = (server: Server) => {
console.log(server.address()["port"])
return (error: NodeJS.ErrnoException): void => {
let port: number | string = server.address()["port"];
if (error.syscall !== 'listen') throw error;
let bind = (typeof port === 'string') ? `pipe ${port}` : `port ${port}`;
switch(error.code) {
case 'EACCES':
console.error(`${bind} requires elevated privileges`);
process.exit(1);
break;
case 'EADDRINUSE':
console.error(`${bind} is already in use`);
process.exit(1);
break;
default:
throw error;
}
}
}