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