我在我的服务器上有一个运行在 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)上工作?
谢谢!
编辑:代码示例(非常简单的Node/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);
.listen()
需要一个“端口”,所以你不应该试图不使用它。localhost:3000
、localhost:3001
等方式访问网站吗?如果你正在使用两台机器,一台客户端和一台服务器,你需要在服务器上添加例外到防火墙,以允许Node接收来自客户端的请求。.listen()
。当我说“应用程序运行”时,这与您说“运行应用程序时没有错误”是相同的。当我说“网页无法加载”时,这与您说“从浏览器无法访问”是相同的。所有访问都来自同一台机器(我的服务器)。感谢您的反馈。 - Benjamin Martin$ supervisor app.js
或$ PORT=[PORT] node app.js
。我会放上一个代码示例。 - Benjamin Martinnode
实例。执行ps -ax| grep node
命令,确保没有任何 node 进程已经绑定到你尝试使用的端口。 - EhevuTov