express app server . listen all interfaces instead of localhost only

回眸只為那壹抹淺笑 提交于 2019-11-27 14:29:19

问题


I'm very new for this stuff, and trying to make some express app

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')
});

When I start the server with the command:

node server.js 

everything goes fine.

I see on the console

listen:3000

and when I try

curl http://localhost:3000

I see 'ok'.

When I try

telnet localhost

I see

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

but when I try

netstat -na | grep :3000

I see

tcp  0  0 0.0.0.0:3000   0.0.0.0:*  LISTEN

The question is: why does it listen all interfaces instead of only localhost?

The OS is linux mint 17 without any whistles.


回答1:


If you use don't specify host while calling app.listen, server will run on all interfaces available(0.0.0.0)

You can bind the IP address using the following code

app.listen(3000, '127.0.0.1');



回答2:


From the documentation: app.listen(port, [hostname], [backlog], [callback])

Binds and listens for connections on the specified host and port. This method is identical to Node’s http.Server.listen().

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



回答3:


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

example:

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

Note: 0.0.0.0 to be given as host in order to access from outside interface



来源:https://stackoverflow.com/questions/33953447/express-app-server-listen-all-interfaces-instead-of-localhost-only

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!