Ответ 1
Слушайте событие error
на сервере isntance
hons_server.on 'error', (err) ->
console.log 'there was an error:', err.message
Это мой код (он coffeescript и использует цвета, но это не относится)
# If this module is executed
if !module.parent
# Start server
try
hons_server.listen config.port
console.log 'Listening to port ' + config.port
catch err
console.error "Couldn't start server: #{String(err)}".red
hons_server
является express.js сервером. Мне сложно понять, почему ошибки, возникающие в результате hons_server.listen()
, не попадают в try/catch. Когда я запускаю свой сервер дважды, я получаю вывод:
$ coffee src/server.coffee Listening to port 9090 node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: listen EADDRINUSE at errnoException (net.js:632:11) at Array.0 (net.js:733:26) at EventEmitter._tickCallback (node.js:192:40)
Я хотел бы знать, почему эта ошибка не была обнаружена, и как/где я могу уловить ошибку EADDRINUSE.
Слушайте событие error
на сервере isntance
hons_server.on 'error', (err) ->
console.log 'there was an error:', err.message
Принятое решение не работает для меня на узлах 0.8.22 и выражает 3.1.0.
Это сделало трюк:
process.on('uncaughtException', function(err) {
if(err.errno === 'EADDRINUSE')
console.log(...);
else
console.log(err);
process.exit(1);
});
Также см. Node.js Экспресс-сообщения при загрузке приложений