我的服务器上运行了一个node.js/express.js应用程序,它只在3000端口上工作,我正在试图找出原因。以下是我的发现:
app.listen()
)的情况下,应用程序会运行,但网页不会加载。app.listen(3001)
)或任何其他未使用的端口上,应用程序运行但网页不加载。我知道Express应用程序默认为3000端口。但奇怪的是,我的应用程序只有在我显式地使其运行在端口3000上(app.listen(3000)
)时才运行。
我在/usr/bin/express
的第220行找到了这个:
app.set(\'port\', process.env.PORT || 3000);
该操作如前所述:将端口设置为指定的内容,如果未指定任何内容,则设置为3000。
我如何使我的应用程序在不同的端口上工作,如8080或3001?
谢谢!
编辑:代码示例(非常简单的节点/Express App)
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);
如果您的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
。
或者,使用您的环境来设置端口。通过环境设置它是用来帮助在生产
和开发
之间划定界限的,而且许多平台即服务使用环境根据它们的规范和内部的Express配置来设置端口。下面设置一个environment key=value对,然后启动应用程序。
$ 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'));