Node.js/Express.js 应用程序仅适用于端口 3000

新手上路,请多包涵

我有一个 Node.js/Express.js 应用程序在我的服务器上运行,它只能在端口 3000 上运行,我正试图找出原因。这是我发现的:

  • 如果不指定端口 ( app.listen() ),应用程序会运行,但不会加载网页。

  • 在端口 3001 ( app.listen(3001) ) 或任何其他未使用的端口上,应用程序运行但网页不加载。

  • 在端口 2999 上,应用程序会抛出错误,因为其他东西正在使用该端口。

  • 在端口 3000 上,应用程序运行并且网页加载正常。

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

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

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

如前所述:将端口设置为指定的端口,如果未指定,则设置为 3000。

如何让我的应用程序在不同的端口(例如 8080 或 3001)上运行?

谢谢!

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

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

原文由 Benjamin Martin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 630
2 个回答

如果您的 app.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);

此代码意味着将您的端口设置为环境变量 PORT ,或者如果 undefined ,则将其设置为文字 3000

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

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

原文由 EhevuTov 发布,翻译遵循 CC BY-SA 3.0 许可协议

bin/www 中,有一行:

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

尝试修改它。

原文由 Larry Lu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题