我目前正在开发一个 node.js 应用程序,但遇到了常见的异步代码问题。
我正在 Node 的 HTTP module之上实现一个服务服务器。
该服务器支持(express like)路由。例如,我的代码如下所示:
server.any("/someRoute",function(req,resp){
resp.end("this text is sent to clients via http")
});
服务器需要能够承受故障,当传递给 any 的函数出现问题时,我不想让整个服务器崩溃。当我编写如下代码时会出现问题:
server.any("/someRoute",function(req,resp){
setTimeout(function(){
throw new Error("This won't get caught");
},100);
});
我不知道我怎么可能在这里捕获错误。我不想因为一个服务器端故障而使服务器崩溃,而是想提供 500 个服务。
我能想出的唯一解决方案真的没有表现力。我只是想出了process.on("uncaughtException",callback)
使用节点 0.8 的类似代码Domains
(这是一个部分补救措施,但域目前有问题,这仍然不是很具有表现力,因为我最终不得不为每个句柄创建一个域)。
我想要完成的是将throw
操作从函数绑定到作用域,理想的解决方案是将所有抛出的错误从函数绑定到特定的处理函数。
这可能吗?在这种情况下处理错误的最佳做法是什么?
我想强调的是,它应该能够在出现错误请求后继续服务请求,并且在每个请求上重新启动服务器或为每个处理程序创建域并捕获它们未捕获的异常对我来说似乎是一个坏主意。另外 - 我听说Promise可能会帮助我(throw
Promise中的东西),在这种情况下Promise可以帮助我吗?