我当时正在教我的朋友介绍节点 我想知道为什么这个代码来自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/');
托管时,它无法从公共IP访问(它仍然可以从localhost访问) 而这段代码来自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生成的新代码运行得很好。
我在这里缺少什么?
答案 0 :(得分:14)
根据server.listen
文档,
开始接受指定端口和主机名上的连接。如果 hostname被省略,服务器将接受指向的连接 任何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');
答案 1 :(得分:4)
127.0.0.1是内部地址
localhost是指向它的默认主机名(本地域)(请参阅/ etc / hosts)
0.0.0.0是您想要用来从外部访问的地址(因此将其公开)
似乎当你没有提供主机名时,节点需要(' http')。createServer()。listen()默认为0.0.0.0而不是localhost' s 127.0 .0.1