在Express和Restify中处理uncaughtException

我使用restify和express。

在restify,我这样创build服务器:

server = restify.createServer(serverSettings); 

然后,我可以像这样处理uncaughtException:

 server.on('uncaughtException', function(req, res, route, err) {}) 

这与process.on('uncaughtException')不同。 因为它捕获了所有的uncaughtException并且可以给客户端一个响应。 所以我喜欢这种方式来捕捉exception。

但在Express中,我找不到像这样的东西。

所以想问一下,有没有同样的事情呢? 或者有一些方法可以实现相同的function?

更新2014年:现在回想起来,NodeJS域名是不稳定和古怪的。 他们产生了很多边缘情况,并没有很多的乐趣。 承诺可能是一个更好的selecterror handling – 良好的承诺库,如蓝鸟和Q产生良好的堆栈痕迹,蓝鸟是快速的承诺也有一个安全的保证。

2017年更新:你一定要使用asynchronous函数来处理你正在做的asynchronous事件,并用它来处理exception,并使用像asynchronous迭代器这样的工具来构buildexception处理。 写callback汤的时代已经过去了。


使用域 。

域名是在0.8版本中引入的,正在开发中,所以它们都很新颖。 在0.10他们相当稳定。 他们提供了一个“uncaughtException”事件的最好方法。 D领域是令人敬畏的弃用:D。 这不是特定的expression,或任何其他特定的框架或图书馆。

一般来说,域可以让你做代码分离。 您在域中启动的所有内容都会让域名抓住它。 他们让你得到简洁的堆栈跟踪,并告诉服务器发生错误时要做什么。 您甚至可以在服务器中使用特定部分的域名,但要记住JS世界中的exception是相对昂贵的事情。

 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 }); 

我也写了一个简单的try / catchasynchronousexception在这里 ,以防您发现有趣的:)