2015-11-27 13 views
5

jestem bardzo nowy w tym rzeczy, i stara się dokonać pewnych Express APPekspresowa aplikacja serwera. słuchać wszystkie intefaces zamiast localhost tylko

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

kiedy wychodząc serwer przez:

node server.js 

wszystko idzie w porządku, zobaczyć w konsoli

listen:3000 

i gdy próbuję

curl http://localhost:3000 

Widzę "ok". gdy próbuję

telnet localhost 

widzę

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

ale gdy próbuję

netstat -na | grep :3000 

widzę

tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 

pytanie brzmi: dlaczego słuchać wszystkich interfejsów zamiast tylko localhost? System jest Linux Mint 17 bez gwizdów

+2

[Grzywna manualny] (https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback) stwierdza: _ "Jeśli nazwa hosta zostanie pominięty, serwer będzie akceptować połączenia na dowolny adres IPv6 (: :) gdy IPv6 jest dostępny, lub dowolny adres IPv4 (0.0.0.0) w przeciwnym razie "_. – robertklep

+0

Dzięki. jest to kolejny znak "Jawny jest lepszy niż niejawny (c)", jak sądzę. – d2048

+1

Biorąc pod uwagę, że akceptowanie połączeń ze światem zewnętrznym jest podstawową przesłanką dla serwera, słuchanie wszystkich interfejsów (w przeciwieństwie do sprzężenia zwrotnego) wydaje się być rozsądną domyślną dla mnie :-) – robertklep

Odpowiedz

11

można powiązać adres IP za pomocą następującego kodu

app.listen(3000, '127.0.0.1'); 
+0

Tak. Teraz wiem. Thanx – d2048

1

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

wiąże i nasłuchuje połączeń na określonym hostem i portem . Ta metoda jest identyczna z funkcją http.Server.listen().

var express = require('express'); 
var app = express(); 
app.listen(3000, '0.0.0.0'); 
Powiązane problemy