1. ホーム
  2. javascript

[解決済み] NodeJS:サーバーのポートを取得する方法は?

2022-04-25 14:15:50

質問

よくNodeのhello worldのサンプルで、Httpサーバーを作成し、ポートでリッスンを開始し、その後、以下のような行が続くというコードを見ます。

console.log('Server is listening on port 8000');

しかし、理想的には、このようにしたいものです。

console.log('Server is listening on port ' + server.port);

を呼び出す前に、サーバーが現在リッスンしているポートの番号を変数に格納せずに取得するにはどうしたらよいでしょうか。 server.listen() ?

この方法は以前見たことがあるのですが、Nodeのドキュメントには見当たりません。もしかしたら、express特有のものなのでしょうか?

どのように解決するのですか?

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