快递应用服务器.只监听所有接口而不是localhost

Pav*_*l L 23 javascript mean node.js express

我对这些东西很新,并尝试制作一些快递应用程序

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

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

node server.js 
Run Code Online (Sandbox Code Playgroud)

一切顺利.

我在控制台上看到了

listen:3000
Run Code Online (Sandbox Code Playgroud)

当我尝试

curl http://localhost:3000
Run Code Online (Sandbox Code Playgroud)

我看到'好'.

当我尝试

telnet localhost
Run Code Online (Sandbox Code Playgroud)

我知道了

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]' 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试

netstat -na | grep :3000
Run Code Online (Sandbox Code Playgroud)

我知道了

tcp  0  0 0.0.0.0:3000   0.0.0.0:*  LISTEN
Run Code Online (Sandbox Code Playgroud)

问题是:为什么它会监听所有接口而不仅仅是localhost?

操作系统是Linux薄荷17没有任何口哨.

Vis*_*hnu 54

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

app.listen(3000, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)

  • 使用`app.list(3000,'0.0.0.0')`允许从远程机器连接. (9认同)

Jul*_*nec 19

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

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

var express = require('express');
var app = express();
app.listen(3000, '0.0.0.0');
Run Code Online (Sandbox Code Playgroud)

  • 如果您在使用 Typescript 时收到“没有此类重载”的错误,请确保第一个参数确实是数字而不是字符串。通常我们将第一个参数作为“process.env.PORT”传递,它实际上是字符串。将其更改为“parseInt(process.env.PORT || '8080')”。 (2认同)

Tha*_*han 12

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

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