У меня есть сервер Red Hat, на котором находится мое приложение node.js. По умолчанию приложение должно запускаться на порту, который настроил пользователь, ИЛИ на 8080.
app.set('port', process.env.PORT || 8080);
http.createServer(app).listen(app.get('port'), function(){
winston.log('info', 'The server has started');
});
Когда я вхожу на сервер Red Hat через ssh>, перехожу в каталог приложения узла и запускаю
node app.js
я получил
info: The server has started
Значит, приложение работает нормально. Однако, когда я перехожу к URL-адресу приложения
server_ip_address: 8080 (пример - 104.37.188.221:8080) он не подключается, и в конечном итоге соединение прерывается.
Я не установил никакую переменную среды для порта, поэтому порт будет 8080. Я предполагаю, что если на этом порте запущена какая-либо другая служба, она не позволит запускать приложение, но это не так.
Есть идеи, что происходит? Как мне отладить эту проблему?
Спасибо.





Вы должны распечатать порт прослушивания в журнале, который поможет вам отлаживать
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});
});
Вы используете ExpressJS? Вы обрабатываете ошибку (404, 500 и т. д.)?
Да, это экспресс-приложение node
Итак, он работает на 8080, но проблема с тайм-аутом все еще возникает. появляется следующая ошибка: -jailshell: firewall-cmd: команда не найдена, когда я запускаю первую команду брандмауэра. но я не думаю, что есть брандмауэр