NodeJS: How to get the server's port?

后端 未结 19 1395
醉梦人生
醉梦人生 2020-12-02 05:47

You often see example hello world code for Node that creates an Http Server, starts listening on a port, then followed by something along the lines of:

conso         


        
相关标签:
19条回答
  • 2020-12-02 06:37

    With latest node.js (v0.3.8-pre): I checked the documentation, inspected the server instance returned by http.createServer(), and read the source code of server.listen()...

    Sadly, the port is only stored temporarily as a local variable and ends up as an argument in a call to process.binding('net').bind() which is a native method. I did not look further.

    It seems that there is no better way than keeping a reference to the port value that you provided to server.listen().

    0 讨论(0)
  • 2020-12-02 06:39

    In express v3.0,

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

    no longer works! For Express v3.0, you should create an app and a server this way:

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

    I ran in to this issue myself and wanted to document the new syntax. This and other changes in Express v3.0 are visible at https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x

    0 讨论(0)
  • 2020-12-02 06:39
    const express = require('express');                                                                                                                           
    const morgan = require('morgan')
    const PORT = 3000;
    
    morgan.token('port', (req) => { 
        return req.app.locals.port; 
    });
    
    const app = express();
    app.locals.port = PORT;
    app.use(morgan(':method :url :port'))
    app.get('/app', function(req, res) {
        res.send("Hello world from server");
    });
    
    app1.listen(PORT);
    
    0 讨论(0)
  • 2020-12-02 06:42

    below a simple http server and how to get the listening port

    var http = require("http");
                 function onRequest(request, response) {
                   console.log("Request received.");
                   response.writeHead(200, {"Content-Type": "text/plain"});
                   response.write("Hello World");
                   response.end();
                 }
    
                 var server =http.createServer(onRequest).listen(process.env.PORT, function(){
                console.log('Listening on port '); //Listening on port 8888
            });
    

    then get the server port by using :

    console.log('Express server started on port %s', server.address().port);
    
    0 讨论(0)
  • 2020-12-02 06:46
    req.headers.host.split(':')[1]
    
    0 讨论(0)
  • 2020-12-02 06:48

    Express 4.x answer:

    Express 4.x (per Tien Do's answer below), now treats app.listen() as an asynchronous operation, so listener.address() will only return data inside of app.listen()'s callback:

    var app = require('express')();
    
    var listener = app.listen(8888, function(){
        console.log('Listening on port ' + listener.address().port); //Listening on port 8888
    });
    

    Express 3 answer:

    I think you are looking for this(express specific?):

    console.log("Express server listening on port %d", app.address().port)
    

    You might have seen this(bottom line), when you create directory structure from express command:

    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)
    }
    
    0 讨论(0)
提交回复
热议问题