NodeJS:如何获取服务器的端口?

2022-08-30 02:18: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文档中找不到它。也许这是要表达的特定内容?


答案 1

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

答案 2

在 Express v3.0 中,

/* No longer valid */
var app = express.createServer();
app.listen();
console.log('Server running on %s', app.address().port);

不再有效!对于 Express v3.0,应按以下方式创建应用和服务器:

var express = require('express');
var http = require('http');

var app = express();
var server = http.createServer(app);

app.get('/', function(req, res) {
    res.send("Hello World!");
});

server.listen(3000);
console.log('Express server started on port %s', server.address().port);

我自己遇到了这个问题,并希望记录新的语法。Express v3.0 中的此更改和其他更改在 https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x