Node の hello world コードの例をよく見かけますが、このコードでは、Http サーバーを作成し、ポートでリッスンを開始し、次に次のようなコードが続きます。
console.log('Server is listening on port 8000');
しかし、理想的には、代わりに次のようになります。
console.log('Server is listening on port ' + server.port);
呼び出す前に変数に番号を保存せずに、サーバーが現在リッスンしているポートを取得するにはどうすればよいですかserver.listen()
?
以前にもこれを見たことがありますが、Node のドキュメントでは見つかりません。おそらく、これは表現すべき特定の何かなのでしょうか?
ベストアンサー1
Express 4.x の回答:
Express 4.x では (以下の Tien Do の回答に従って)、app.listen() を非同期操作として扱うようになったため、listener.address() は app.listen() のコールバック内のデータのみを返します。
var app = require('express')();
var listener = app.listen(8888, function(){
console.log('Listening on port ' + listener.address().port); //Listening on port 8888
});
3つの答えを表現してください:
あなたが探しているのはこれだと思います(具体的には):
console.log("Express server listening on port %d", app.address().port)
express
コマンドからディレクトリ構造を作成するときに、これ(一番下の行)を見たことがあるかもしれません:
alfred@alfred-laptop:~/node$ express test4
create : test4
create : test4/app.js
create : test4/public/images
create : test4/public/javascripts
create : test4/logs
create : test4/pids
create : test4/public/stylesheets
create : test4/public/stylesheets/style.less
create : test4/views/partials
create : test4/views/layout.jade
create : test4/views/index.jade
create : test4/test
create : test4/test/app.test.js
alfred@alfred-laptop:~/node$ cat test4/app.js
/**
* Module dependencies.
*/
var express = require('express');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.use(express.bodyDecoder());
app.use(express.methodOverride());
app.use(express.compiler({ src: __dirname + '/public', enable: ['less'] }));
app.use(app.router);
app.use(express.staticProvider(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', function(req, res){
res.render('index.jade', {
locals: {
title: 'Express'
}
});
});
// Only listen on $ node app.js
if (!module.parent) {
app.listen(3000);
console.log("Express server listening on port %d", app.address().port)
}