Во-первых, как мне регистрировать исключения верхнего уровня? Последнее, что я хочу, это ошибка, чтобы полностью убить процесс узла. Я хочу продолжать обслуживать пользователей перед лицом любой ошибки.
Редактировать: Я думаю, что философия узла в целом заключается в том, что любые необработанные исключения должны уничтожить процесс, и что вы должны запускать приложение вашего узла под каким-то монитором процесса с соответствующей регистрацией объекты. Следующий совет касается любых других ошибок, с которыми вы можете столкнуться в обработчиках экспресс-маршрутов и т. Д.
Express имеет общий обработчик ошибок, который должен регистрировать все сгенерированные ошибки, а также все, что передается в качестве параметра next
в ваших маршрутах / промежуточном программном обеспечении, и отвечать 500 Internal Server Error
.
Во-вторых, некоторые ошибки передаются через обратные вызовы (мы используем caolan / async). Как часть каждого обработчика маршрута, мы либо визуализируем представление (GET), перенаправляем на другой маршрут (POST), и мы хотим перенаправить на экран ошибок с пользовательским сообщением об ошибке. Как я могу сделать так, чтобы эта логика была в одном месте?
Вы можете создать пользовательский handleError
, который вы вызываете при каждом обратном вызове, например:
async.series(..., function(err, results) {
if(err)
return handleError(req, res, err);
// ...
});
Или вы можете просто передать ошибки с помощью next(err)
и реализовать свой собственный обработчик ошибок, как описано здесь: http://expressjs.com/guide/error-handling.html