Expressjs服务器地址主机什么都不返回

遵循标准ExpressJs问候语的例子,我得到了一个'::'的主机。

为什么会发生?

你好单词的例子:

var server = app.listen(3000, function () { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port); }); 

我发现一个提示是在端口参数后添加'localhost'。 它解决了我只是看我的电脑,但它不会在networking上工作。 我该怎么办?

对于代码

 var server = app.listen(3000, function () { 

listenfunction中没有地址参数的情况下,Node会将其绑定到与IPV4的地址0.0.0.0相关的任何地址 ,并且对应于IPV6 :: 。 而这个IPv6未指定地址0:0:0:0:0:0:0:0被简化为::

运行netstat -a

  TCP [::]:3000 CP-Q10001:0 LISTENING 

我们知道节点服务器在地址::用端口3000监听。


请参阅http.listen 这里使用的express.js

 app.listen = function listen() { var server = http.createServer(this); return server.listen.apply(server, arguments); }; 

如果省略主机名,则服务器将接受任何IPv6地址(::)上的连接,当IPv6可用时,或者任何IPv4地址(0.0.0.0)。

我试过这个例子,并有相同的输出为主机名'::',我做了以下更改作为一种解决方法:

  var server = app.listen(3000, 'localhost', function () { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port); }); 

输出:

示例应用程序在http://127.0.0.1:3000上进行侦听

这会给你你正在寻找的结果。 你不需要包含'localhost'

 var server = app.listen(3000, function () { var port = server.address().port; require('dns').lookup(require('os').hostname(), function (err, add, fam) { debug('Example app listening at http://%s:%s', add, port); }) });