6

我同时使用restify和express。

在restify中,我以这种方式创建服务器:

server = restify.createServer(serverSettings);

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

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

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

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

所以就想问一下,快递里有没有一样的东西?或者有什么方法可以实现相同的功能?

4

1 回答 1

4

2014 年更新:回想起来,NodeJS 域有点不稳定和古怪。它们产生了很多边缘情况,而且不是很有趣。Promise 可能是错误处理的更好选择——像 Bluebird 和 Q 这样的良好 Promise 库会产生良好的堆栈跟踪,而且 Bluebird 速度很快——Promise 还具有捕获安全保证。

2017 年更新:您绝对应该一次性将异步函数用于您正在执行的任何异步操作,并将其用于异常处理,并使用异步迭代器等工具内置的语言进行异常处理。写回调汤的日子已经一去不复返了。


使用

域是在 0.8 版中引入的,并且正在开发中,因此它们是相当新的。在 0.10 中,它们非常稳定。它们为“uncaughtException”事件提供了一种更好的方法。域是真棒弃用: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
});

我还在这里为异步异常编写了一个简单的 try/catch ,以防你觉得有趣:)

于 2013-07-30T07:39:33.773 回答