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

Bre*_*eal 13 javascript node.js express

按照标准的ExpressJs hello word示例,我得到一个':::'的主机.

为什么会这样?

你好的例子:

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);
});
Run Code Online (Sandbox Code Playgroud)

我找到了一个在port参数后添加'localhost'的提示.当我只看我的电脑时,它解决了,但它无法通过网络工作.我该怎么办?

zan*_*ngw 9

对于代码

var server = app.listen(3000, function () {
Run Code Online (Sandbox Code Playgroud)

如果listen函数中没有地址参数,Node会将其绑定到任何0.0.0.0IPV4 地址相关的地址,并对应::IPV6.而这个IPv6未指明的地址,0:0:0:0:0:0:0:0减少到::,

跑完之后 netstat -a

 TCP    [::]:3000              CP-Q10001:0       LISTENING
Run Code Online (Sandbox Code Playgroud)

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


请参阅http.listenexpress.js应用在这里

app.listen = function listen() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

 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);
});
Run Code Online (Sandbox Code Playgroud)

输出:

示例app在http://127.0.0.1:3000上收听