Node.js/Express.js App仅适用于端口3000

Ben*_*tin 91 javascript port configuration node.js express

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

  • 如果不指定port(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);
Run Code Online (Sandbox Code Playgroud)

这是如前所述:将端口设置为指定的端口,如果未指定任何内容,则设置为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);
Run Code Online (Sandbox Code Playgroud)

Ehe*_*Tov 109

如果您的app.js中有类似的内容,则以下情况有效:

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

显式硬编码代码以使用您想要的端口,例如:

app.set('port', process.env.PORT || 3000);
Run Code Online (Sandbox Code Playgroud)

此代码表示将端口设置为环境变量,PORT或者如果是,undefined则将其设置为文字3000.

或者,使用您的环境设置端口.通过环境进行设置用于帮助描述PRODUCTION和之间以及DEVELOPMENT许多平台即服务使用环境根据其规范以及内部Express配置来设置端口.以下设置环境键=值对,然后启动您的应用程序.

$ PORT=8080 node app.js
Run Code Online (Sandbox Code Playgroud)

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

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'));
Run Code Online (Sandbox Code Playgroud)

  • 这真的很奇怪.我已经完成了以下操作:1.将`app.set()`代码放在我的应用程序中并将3000更改为8080.仍然只适用于`app.listen(3000)`.2.运行节点应用程序时,将环境端口变量更改为8080.仍然只适用于`app.listen(3000)`.3.转到/ usr/bin/express(第220行)并将3000更改为8080.仍然只适用于`app.listen(3000)`.感谢您提供信息丰富的帖子.我需要重启吗?我无法重新启动Express,每次使用`node app.js时重启Node应用程序都会重启 (2认同)

Lar*_* Lu 27

bin/www,有一条线:

var port = normalizePort(process.env.PORT || '3000');
Run Code Online (Sandbox Code Playgroud)

尝试修改它.


Joh*_*ams 12

试试这个

$ PORT=8080 node app.js
Run Code Online (Sandbox Code Playgroud)


Ali*_*vci 9

更改Express框架上的侦听端口的默认方法是修改bin文件夹中名为www的文件.

在那里,你会发现如下所示的一行

var port = normalizePort(process.env.PORT || '3000');
Run Code Online (Sandbox Code Playgroud)

将值3000更改为您希望的任何端口.

这适用于Express 4.13.1版


Abh*_*tam 9

请参阅此链接.

尝试找到bin> www location并尝试更改端口号...