Ответ 1
Во-первых, expressJS не бросает событие uncaughtException
, процесс делает, поэтому неудивительно, что ваш код не работает.
Поэтому используйте: process.on('uncaughtException',handler)
.
Далее, expressJS уже предоставляет стандартные средства обработки ошибок, которые должны использовать функцию промежуточного программного обеспечения, которую он обеспечивает для этой цели, например:
app.configure(function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
Эта функция возвращает сообщение об ошибке клиенту с дополнительным стеклом и документируется в connectJS errorHandler.
(Обратите внимание, что errorHandler на самом деле является частью connectJS и доступен только expressJS.)
Если поведение, предоставленное существующим методом errorHandler, недостаточно для ваших нужд, его источник находится в connectJS errorHandler
промежуточном программном обеспечении и может быть легко модифицируется в соответствии с вашими потребностями.
Конечно, вместо того, чтобы напрямую модифицировать эту функцию, "правильный" способ сделать это - создать свой собственный errorHandler, используя версию connectJS в качестве отправной точки, например:
var myErrorHandler = function(err, req, res, next){
...
// note, using the typical middleware pattern, we'd call next() here, but
// since this handler is a "provider", i.e. it terminates the request, we
// do not.
};
И установите его в expressJS как:
app.configure(function(){
app.use(myErrorHandler);
});
См. Просто подключите его, уже для объяснения идеи connectJS для filter
и provider
промежуточного программного обеспечения и Как написать промежуточное программное обеспечение для Connect/Express для хорошо написанного учебника.
Вы также можете найти их полезными:
Наконец, отличный источник информации о тестировании expressJS можно найти в свои собственные тесты.