为什么Node.js应用程序只能从127.0.0.1/localhost访问?

我是关于教我的朋友介绍节点,但后来我想知道为什么这个代码nodejs.org:

var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(80, '127.0.0.1'); console.log('Server running at http://127.0.0.1:80/'); 

当托pipe时,它不能从公共IP访问(它仍然可以从本地主机访问,虽然)这个代码从express.js:

 var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); var app = express(); // all environments app.set('port', process.env.PORT || 80); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/', routes.index); app.get('/users', user.list); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

确实。 请帮助我修改nodejs主页中的基本代码,使其可以从公共ip访问,这样我就可以以非常基本的方式向我的朋友展示它。 express.js生成的新代码工作得很好。

我在这里错过了什么?

根据server.listen文档,

开始接受指定端口和主机名的连接。 如果主机名被省略,服务器将接受指向任何IPv4地址(INADDR_ANY)的连接。

要使其接受来自所有ips( 0.0.0.0 )的连接,请将其更改为像这样读取

 }).listen(80); // No explicit ip, defaults to all ips 0.0.0.0 console.log('Server running in port 80'); 

127.0.0.1是一个内部地址

localhost是指向它的默认主机名(本地域)(请参阅/ etc / hosts)

0.0.0.0是你想要使用的地址,使其可以从外部访问(从而使其公开)

好像当你不提供主机名时,node的require('http').createServer()。listen()默认为0.0.0.0,而不是本地主机的127.0.0.1