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

时间:2014-03-04 06:56:40

标签: javascript node.js

我当时正在教我的朋友介绍节点 我想知道为什么这个代码来自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生成的新代码运行得很好。

我在这里缺少什么?

2 个答案:

答案 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