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

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

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

我看到“ OK”了。

当我尝试的时候

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 薄荷17没有任何口哨。

118597 次浏览

如果在调用 应用,听着时没有指定主机,服务器将在所有可用的接口上运行,即在 0.0.0.0

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

app.listen(3000, '127.0.0.1');

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

app.listen(3000, '0.0.0.0');

或者

app.listen(3000)

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

绑定并侦听指定主机和端口上的连接。此方法与 Node 的 http。

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

文件: app.listen([port[, host[, backlog]]][, callback])

例如:

const express = require('express');
const app = express();
app.listen('9000','0.0.0.0',()=>{
console.log("server is listening on 9000 port");
})

注意: 0.0.0.0将作为主机提供,以便从外部接口访问