我同时使用restify和express。
在解析时,我以这种方式创建服务器:
server = restify.createServer(serverSettings);
然后,我可以像这样处理uncaughtException:
server.on('uncaughtException', function(req, res, route, err) {})
与process.on('uncaughtException')不同。因为它捕获了所有uncaughtException并且可以给客户端做出响应。所以我喜欢这种方式来捕捉异常。
但在Express中,我找不到这样的东西。
所以只想问一下,快递中有同样的事吗?或者有一些方法可以实现相同的功能?
答案 0 :(得分:4)
2014年更新:回想起来,NodeJS领域有点不稳定和古怪。它们会产生很多边缘情况并且不是很有趣。 Promise可能是错误处理的更好选择 - 像Bluebird和Q这样的好承诺库会产生良好的堆栈跟踪并且Bluebird很快 - 承诺也有捕获安全保证。
2017年更新:对于您正在进行的异步操作,您肯定应该使用异步函数,并将其用于异常处理,并使用异步迭代器等异常处理工具构建的语言进行异常处理。写回调汤的日子早已过去了。
使用domains。
域名是在0.8版本中引入的,并且正在进行中,因此它们非常新。在0.10他们非常稳定。它们提供了“uncaughtException”事件的优选方法。域名 awesome 已弃用:D。它不是特定于表达或任何其他特定框架或库。
一般来说,域允许您进行代码分离。您在域中启动的所有内容都会让域抓住它。它们可以让您获得简洁的堆栈跟踪,并告诉服务器发生错误时该怎么做。您甚至可以将域用于服务器中的特定部分,但请记住,异常是JS世界中相对昂贵的事情。
var d = domain.create();
d.on('error', function(er) {
//your handler here
});
d.run(function(){
//create the server here,
//errors thrown will be handled by the domain handler
});
我还为异步异常here写了一个简单的try / catch,以防你觉得有趣:)