我在服务器上运行了一个Node.js / Express.js应用程序,该应用程序仅在端口3000上运行,我试图找出原因。这是我发现的:
- 如果不指定端口(
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);
如前所述:将端口设置为指定的端口,如果未指定则设置为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);
.listen()
。在上面我说“该应用程序正在运行”时,这与您所说的“在运行该应用程序时没有错误”相同。当我说“网页无法加载”时,这与您说“无法从浏览器访问”相同。所有访问都来自同一台机器(我的服务器)。感谢您的反馈。
$ supervisor app.js
或$ PORT=[PORT] node app.js
想设置环境端口变量时。我将提供一个代码示例。
port
是必填项.listen()
,因此您不应该尝试没有。2)在运行应用程序时遇到任何错误?还是从浏览器看来无法访问?3)您试图访问的网站在同一台机器上localhost:3000
,localhost:3001
等?如果使用的是两台机器,一台客户端和一台服务器,则需要向服务器上的防火墙添加例外,以允许Node接收来自客户端的请求。