Solución:
Respuesta expresa 4.x:
Express 4.x (según la respuesta de Tien Do a continuación), ahora trata app.listen () como una operación asincrónica, por lo que listener.address () solo devolverá datos dentro de la devolución de llamada de app.listen ():
var app = require('express')();
var listener = app.listen(8888, function(){
console.log('Listening on port ' + listener.address().port); //Listening on port 8888
});
Expresa 3 respuesta:
Creo que estás buscando esto (¿expreso específico?):
console.log("Express server listening on port %d", app.address().port)
Es posible que haya visto esto (línea inferior), cuando crea la estructura de directorio desde express
mando:
[email protected]:~/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
[email protected]:~/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("https://foroayuda.es/", 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)
}
En express v3.0,
/* No longer valid */
var app = express.createServer();
app.listen();
console.log('Server running on %s', app.address().port);
ya no funciona! Para Express v3.0, debe crear una aplicación y un servidor de esta manera:
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
app.get("https://foroayuda.es/", function(req, res) {
res.send("Hello World!");
});
server.listen(3000);
console.log('Express server started on port %s', server.address().port);
Me encontré con este problema yo mismo y quería documentar la nueva sintaxis. Este y otros cambios en Express v3.0 son visibles en https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
En la versión actual (v0.5.0-pre), el puerto parece estar disponible como una propiedad en el objeto del servidor, consulte http://nodejs.org/docs/v0.4.7/api/net.html#server.address
var server = http.createServer(function(req, res) {
...
}
server.listen(8088);
console.log(server.address());
console.log(server.address().address);
console.log(server.address().port);
salidas
{ address: '0.0.0.0', port: 8088 }
0.0.0.0
8088