Node.js/Express.js App Only Works on Port 3000

后端 未结 16 2185
暖寄归人
暖寄归人 2020-12-12 13:23

I have a Node.js/Express.js app running on my server that only works on port 3000 and I\'m trying to figure out why. Here\'s what I\'ve found:

  • Without specifyi
相关标签:
16条回答
  • 2020-12-12 13:50

    In app.js, just add...

    process.env.PORT=2999;
    

    This will isolate the PORT variable to the express application.

    0 讨论(0)
  • 2020-12-12 13:51

    Refer to this link.

    Try to locate the bin>www location and try to change the port number...

    0 讨论(0)
  • 2020-12-12 13:51

    The line you found just looks for the environmental variable PORT, if it's defined it uses it, otherwise uses the default port 3000. You have to define this environmental variable first (no need to be root)

    export PORT=8080
    node <your-app.js>
    
    0 讨论(0)
  • 2020-12-12 13:52

    The following works if you have something like this in your app.js:

    http.createServer(app).listen(app.get('port'),
      function(){
        console.log("Express server listening on port " + app.get('port'));
    });
    

    Either explicitly hardcode your code to use the port you want, like:

    app.set('port', process.env.PORT || 3000);
    

    This code means set your port to the environment variable PORT or if that is undefined then set it to the literal 3000.

    Or, use your environment to set the port. Setting it via the environment is used to help delineate between PRODUCTION and DEVELOPMENT and also a lot of Platforms as a Service use the environment to set the port according to their specs as well as internal Express configs. The following sets an environment key=value pair and then launches your app.

    $ PORT=8080 node app.js
    

    In reference to your code example, you want something like this:

    var express = require("express");
    var app = express();
    
    // sets port 8080 to default or unless otherwise specified in the environment
    app.set('port', process.env.PORT || 8080);
    
    app.get('/', function(req, res){
        res.send('hello world');
    });
    
    // Only works on 3000 regardless of what I set environment port to or how I set
    // [value] in app.set('port', [value]).
    // app.listen(3000);
    app.listen(app.get('port'));
    
    0 讨论(0)
  • 2020-12-12 13:56

    Just a note for Mac OS X and Linux users:

    If you want to run your Node / Express app on a port number lower than 1024, you have to run as the superuser: sudo PORT=80 node app.js

    0 讨论(0)
  • 2020-12-12 14:00

    In the lastest version of code with express-generator (4.13.1) app.js is an exported module and the server is started in /bin/www using app.set('port', process.env.PORT || 3001) in app.js will be overridden by a similar statement in bin/www. I just changed the statement in bin/www.

    0 讨论(0)
提交回复
热议问题