Javascript Node.js/Express.js应用程序仅适用于端口3000
我有一个Node.js/Express.js应用程序在我的服务器上运行,它只在端口3000上运行,我正在试图找出原因。以下是我的发现:Javascript Node.js/Express.js应用程序仅适用于端口3000,javascript,node.js,configuration,express,port,Javascript,Node.js,Configuration,Express,Port,我有一个Node.js/Express.js应用程序在我的服务器上运行,它只在端口3000上运行,我正在试图找出原因。以下是我的发现: 如果不指定端口(app.listen()),应用程序将运行,但网页不会加载 在端口3001(app.listen(3001))或任何其他未使用的端口上,应用程序运行,但网页不加载 在端口2999上,应用程序抛出一个错误,因为有其他东西正在使用该端口 在端口3000上,应用程序运行,网页加载正常 我知道Express应用程序默认为端口3000。但奇怪的是,我的
- 如果不指定端口(
),应用程序将运行,但网页不会加载app.listen()
- 在端口3001(
)或任何其他未使用的端口上,应用程序运行,但网页不加载李>app.listen(3001)
- 在端口2999上,应用程序抛出一个错误,因为有其他东西正在使用该端口
- 在端口3000上,应用程序运行,网页加载正常
app.listen(3000)
)
我在/usr/bin/express
的第220行找到了这个:
app.set(\'port\', process.env.PORT || 3000);
如前所述:将端口设置为指定的端口,如果未指定任何端口,则设置为3000
如何使我的应用程序在不同的端口(如8080或3001)上工作
谢谢
编辑:代码示例(非常简单的节点/快速应用)
试试这个
$ PORT=8080 node app.js
如果您的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
,或者如果该变量未定义
,则将其设置为文本3000
或者,使用您的环境设置端口。通过环境设置端口用于帮助划分生产
和开发
之间的界限,许多平台作为一种服务使用环境根据其规格以及内部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'));
注意到这个问题一直没有解决。。。您的计算机前面可能有防火墙阻止这些端口,或者设置了iptables以阻止使用这些端口 运行应用程序时,请尝试运行nmap-F localhost(如果没有,请安装nmap)。如果您在正确的端口上运行应用程序,并且无法通过远程浏览器访问应用程序,则存在一些中间件或物理防火墙正在阻止该端口
希望这有帮助 请注意Mac OS X和Linux用户: 如果要在低于1024的端口号上运行Node/Express应用程序,则必须以超级用户身份运行:
在最新版本的带有express generator(4.13.1)的代码中,
sudo PORT=80节点app.js
app.js是一个导出模块,服务器在/bin/www中使用app.js中的app.set('PORT',process.env.PORT | 3001)启动,将被bin/www中的类似语句覆盖。
我刚刚更改了bin/www中的语句。在Express framework上更改侦听端口的默认方法是修改bin文件夹中名为www的文件 在这里,您将发现一行如下所示
var port = normalizePort(process.env.PORT || '3000');
将值3000更改为所需的任何端口
这对Express版本4.13.1有效,在
bin/www
中有一行:var port = normalizePort(process.env.PORT || '3000');
尝试修改它。您找到的行只查找环境变量
PORT
,如果定义了它,则使用它,否则使用默认端口3000
。您必须首先定义这个环境变量(不需要是root)
导出端口=8080
节点
如果您想显示您在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!')
})
我希望这将对您有所帮助确保您是从应用程序的文件夹运行的,在那里您有package.json。根据当前版本的express回答 如果您谈论express的当前版本,如果您运行app.listen()开始侦听而不指定端口,express将为您的应用程序选择一个随机端口,以了解当前正在使用的端口
app.listen(0, () => {
console.log(app.address().port)
}
应该输出应用程序的端口。此外,可以完全忽略第一个参数0
,但不建议使用
尝试定位bin>www位置并尝试更改端口号…我正在使用minimist
包和节点启动参数来控制端口
node server.js——端口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
然后,您可以在端口上使用listen
变量。在app.js中,只需添加
process.env.PORT=2999;
这将把端口变量隔离到express应用程序。我认为最好的方法是使用软件包并在.env
配置文件上设置端口,而无需修改文件夹bin
中的文件www
只需使用以下命令安装软件包:
npm安装dotenv
在您的应用程序中需要它:
require('dotenv').config()
在项目的根目录中创建一个.env文件,并在其中添加端口(例如)以侦听端口5000
PORT=5000
就这样
更多信息如果您使用的是Nodemon,我猜端口3000是在nodemonConfig中设置的。
检查情况是否如此。谢谢你的回答-只有在app.js中设置了app.listen(3000)时,这才有效。换句话说,当我像您一样运行应用程序时设置端口似乎不会覆盖app.listen().Perfect。我使用的是express:PORT=8000 npm启动。因此,您可以使用任何您想要的:D.1)需要端口,因此您不应该尝试不使用。2) 运行应用程序时是否出现任何错误?或者它只是看起来无法从浏览器访问?3) 您是否正在尝试使用localhost:300访问同一台计算机上的网站
require('dotenv').config()
PORT=5000