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

时间:2013-08-02 04:06:15

标签: javascript node.js configuration express port

我的服务器上运行的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等其他端口上运行?

谢谢!

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

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

16 个答案:

答案 0 :(得分:101)

如果您在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'));

答案 1 :(得分:24)

bin/www中,有一行:

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

尝试修改它。

答案 2 :(得分:12)

试试这个

$ PORT=8080 node app.js

答案 3 :(得分:9)

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

在那里,你会找到一行,如下所示

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

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

这适用于Express版本4.13.1

答案 4 :(得分:7)

Refer to this link.

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

答案 5 :(得分:4)

在带有express-generator(4.13.1)的最新版代码中,app.js是一个导出的模块,服务器是使用app.set在&bin / www中启动的(' port',进程app.js中的.env.PORT || 3001)将被bin / www中的类似语句覆盖。 我刚刚改变了bin / www。

中的陈述

答案 6 :(得分:3)

仅适用于Mac OS X和Linux用户:

如果要在低于1024的端口号上运行Node / Express应用程序,则必须以超级用户身份运行: sudo PORT=80 node app.js

答案 7 :(得分:2)

您找到的行只查找环境变量PORT,如果已定义它使用它,否则使用默认端口3000。您必须首先定义此环境变量(不需要是root)

export PORT=8080
node <your-app.js>

答案 8 :(得分:2)

如果您想要显示您在3000上连接的内容

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})

我希望这会对你有所帮助

答案 9 :(得分:1)

注意到这从未解决过......您的机器前面可能有防火墙阻塞这些端口,或者设置了iptables以防止使用这些端口。

在运行应用程序时尝试运行nmap -F localhost(如果没有,请安装nmap)。如果您在正确的端口上运行应用程序并且无法通过远程浏览器访问它,则会有一些中间件或物理防火墙阻止该端口。

希望这有帮助!

答案 10 :(得分:1)

根据 当前版本的快递

进行回答

如果您谈论 当前版本的快递 ,如果您运行 app.listen() 在没有指定端口的情况下开始监听,Express将为您的应用程序选择 随机端口 ,以了解当前正在运行的端口

app.listen(0, () => {
    console.log(app.address().port)
}

输出 app端口。此外,第一个参数0可以完全忽略,但 不推荐

答案 11 :(得分:1)

在app.js中,只需添加...

process.env.PORT=2999;

这会将PORT变量隔离到快速应用程序中。

答案 12 :(得分:0)

确保从应用程序的该文件夹运行,其中包含package.json。

答案 13 :(得分:0)

我使用minimist包和节点启动参数来控制端口。

node server.js --port 4000

node server.js -p 4000

在server.js内部,可以通过

确定端口
var argv = parseArgs(process.argv.slice(2))

const port = argv.port || argv.p || 3000;
console.log(`Listening on port ${port}...`)

//....listen(port);

如果没有端口作为参数传递,则默认为3000。

然后,您可以使用port变量上的listen。

答案 14 :(得分:0)

我认为最好的方法是使用dotenv软件包并在.env配置文件上设置端口,而无需修改文件夹www中的文件bin。 / p>

只需使用以下命令安装软件包:

npm install dotenv

在您的应用程序上要求它:

require('dotenv').config()

在项目的根目录中创建一个.env文件,并在其中添加端口(例如)以监听端口5000

PORT=5000

就是这样。

更多信息here

答案 15 :(得分:0)

如果使用的是Nodemon,我想是在nodemonConfig中设置了PORT 3000。 检查是否是这种情况。