快递应用服务器。监听所有接口而不是仅监听本地主机

新手上路,请多包涵

我对这些东西很陌生,正在尝试制作一些快速应用程序

var express = require('express');
var app = express();

app.listen(3000, function(err) {
    if(err){
       console.log(err);
       } else {
       console.log("listen:3000");
    }
});

//something useful
app.get('*', function(req, res) {
  res.status(200).send('ok')
});

当我使用命令启动服务器时:

 node server.js

一切顺利。

我在控制台上看到

listen:3000

当我尝试

curl http://localhost:3000

我看到’好的’。

当我尝试

telnet localhost

我懂了

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'

但是当我尝试

netstat -na | grep :3000

我懂了

tcp  0  0 0.0.0.0:3000   0.0.0.0:*  LISTEN

问题是:为什么它监听所有接口而不是只监听本地主机?

操作系统是 linux mint 17,没有任何提示。

原文由 Pavel L 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 256
2 个回答

如果您在调用 app.listen 时未指定主机,服务器将在所有可用接口上运行,即在 0.0.0.0

您可以使用以下代码绑定IP地址

app.listen(3000, '127.0.0.1');

如果要在所有界面中运行服务器,请使用以下代码

app.listen(3000, '0.0.0.0');

或者

app.listen(3000)

原文由 Vishnu 发布,翻译遵循 CC BY-SA 4.0 许可协议

来自文档app.listen(port, [hostname], [backlog], [callback])

绑定并侦听指定主机和端口上的连接。此方法与 Node 的 http.Server.listen() 相同。

 var express = require('express');
var app = express();
app.listen(3000, '0.0.0.0');

原文由 Julien Le Coupanec 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题