Я новичок в node.js, хотя в целом хорошо знаком с JavaScript. Мой вопрос касается «лучших практик» по обработке ошибок в node.js.
Обычно при программировании веб-серверов, серверов FastCGI или веб-страниц на разных языках я использую Исключения с обработчиками блокировки в многопоточной среде. Когда приходит запрос, я обычно делаю что-то вроде этого:
function handleRequest(request, response) {
try {
if (request.url=="whatever")
handleWhateverRequest(request, response);
else
throw new Error("404 not found");
} catch (e) {
response.writeHead(500, {'Content-Type': 'text/plain'});
response.end("Server error: "+e.message);
}
}
function handleWhateverRequest(request, response) {
if (something)
throw new Error("something bad happened");
Response.end("OK");
}
Таким образом я всегда могу обработать внутренние ошибки и отправить действительный ответ пользователю. Моя проблема здесь в том, что я больше не могу использовать одну попытку / поймать и, следовательно, обычно не могу поймать какую-либо ошибку, которая может возникнуть во время обработки запроса.
Конечно, я мог бы добавить try / catch в каждый обратный вызов, но мне не нравится этот подход, потому что тогда программист должен не забыть try / catch. Для сложного сервера с множеством различных и сложных обработчиков это неприемлемо.
Я мог бы использовать глобальный обработчик исключений (предотвращающий полный сбой сервера), но тогда я не могу отправить ответ пользователю, так как я этого не делаю. не знаю, какой запрос привел к исключению. Это также означает, что запрос остается необработанным / открытым и браузер вечно ждет ответа.
Есть ли у кого-то хорошие, твердое решение?