И на самом деле, я не совсем понимаю, почему мой код не находится в трассировке стека, если node является однопоточным. Может быть, я принципиально недопонимаю, что-то, но почему мое приложение иногда умирает со стеком, у которого нет ничего, что я написал в нем?
Я пишу довольно простой прокси-сервер, используя node/express. В качестве примера я периодически получал эту "ошибку зависания сокета":
Error: socket hang up
at createHangUpError (_http_client.js:250:15)
at Socket.socketOnEnd (_http_client.js:342:23)
at emitNone (events.js:91:20)
at Socket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:926:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9) code: 'ECONNRESET' }
И поскольку ни один из файлов javascript в трассировке стека не является моим, я понятия не имел, откуда это взялось. Это было в основном проб и ошибок, пытаясь поймать ошибки и добавить обработчики ошибок в стиле .on, пока я не нашел нужное место.
Мне кажется, что я принципиально пропущу что-то - что я должен делать по-другому, чтобы отлаживать такие ошибки? Как я могу узнать, где его обрабатывать, если я не вижу, что (в моем коде) вызывает его? Как узнать, должен ли я использовать блок try/catch или что-то вроде request.on('error') {...}
?