节点.js/快速.js应用程序仅适用于端口 3000

我的服务器上运行着一个Node.js / Express.js应用程序,该应用程序仅适用于端口3000,我正试图找出原因。以下是我的发现:

  • 如果不指定端口 (),应用将运行,但网页不会加载。app.listen()
  • 在端口 3001 () 或任何其他未使用的端口上,应用将运行,但网页不会加载。app.listen(3001)
  • 在端口 2999 上,应用会引发错误,因为其他设备正在使用该端口。
  • 在端口 3000 上,应用运行,网页加载正常。

我知道Express应用程序默认为端口3000。但奇怪的是,我的应用仅在我显式使其在端口 3000 () 上运行时才运行。app.listen(3000)

我在以下的第220行找到了这个:/usr/bin/express

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

如前所述:将端口设置为指定值,如果未指定任何内容,则设置为 3000。

如何使我的应用在 8080 或 3001 等其他端口上运行?

谢谢!

编辑:代码示例(非常简单的节点/快速应用程序)

var express = require("express");
var app = express();

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

答案 1

如果您的应用中有类似的东西.js,则以下方法有效:

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

要么显式硬编码代码以使用所需的端口,例如:

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

此代码表示将端口设置为环境变量,或者如果设置为文本 ,则将其设置为文本 。PORTundefined3000

或者,使用您的环境来设置端口。通过环境设置它用于帮助在和之间划定,并且许多平台即服务使用环境根据其规范以及内部Express配置来设置端口。下面设置环境键=值对,然后启动你的应用。PRODUCTIONDEVELOPMENT

$ PORT=8080 node app.js

在参考您的代码示例时,您需要如下所示的内容:

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

答案 2

在 中,有一行:bin/www

var port = normalizePort(process.env.PORT || '3000');

尝试修改它。