我的node.js应用程序驻留在Red Hat服务器上。默认情况下,该应用程序可以在用户已设置的端口上运行,也可以在8080上运行
app.set('port', process.env.PORT || 8080);
http.createServer(app).listen(app.get('port'), function(){
winston.log('info', 'The server has started');
});
当我通过ssh登录到Red Hat服务器时>进入节点应用目录并运行
node app.js
我明白了
信息:服务器已启动
因此应用程序正常运行。但是,当我转到应用程序网址
时server_ip_address:8080(例如-104.37.188.221:8080),它没有连接,连接最终超时。
我没有为端口设置任何环境变量,因此该端口将为8080。我假设如果该端口上正在运行任何其他服务,则它不会让该应用程序运行,但事实并非如此。
知道发生了什么吗?如何调试此问题?
谢谢。
答案 0 :(得分:0)
您应该在日志中打印侦听端口,以帮助您调试
app.set('port', process.env.PORT || 8080);
const server = http.createServer(app);
server.listen(app.get('port'), function(){
winston.log('info', 'The server has started on port ' + server.address().port);
});
并确保您已打开端口(如果启用了防火墙)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
更新:
您可能想在所有路由的末尾添加错误处理程序,例如
// error handler
app.use(function(err, req, res, next) {
res.status(err.status || 500).json({ error: err});
});