本来我想问一个关于如何创建基于Node.js的robuts web服务器的问题。但是,这可能是一个非常大而模糊的问题。所以我将它分解为创建robuts Web服务器时所面临的小而具体的问题或挑战。NodeJs在异步方法中发生未处理的错误
因此,我面临的挑战之一是如何捕获Node.js中所有未处理的错误?我想这样做,因为我不希望任何未处理的错误停止运行Node.js,从而导致Web服务器停机。
想到的解决方案是将服务器运行代码块放在try-catch块中以捕获所有未处理的错误。但是,如果从异步方法发生任何错误,则这不起作用。例如我的Web服务器可能看起来像下面的代码:
var fs = require('fs');
var http = require('http');
try {
// Here is my main web server, it could happen errors by adding
// more and more modules and functionalities to my server.
// I need to catch all unhandled errors to prevent server from crashing
// So, I put my whole server running in a try-catch block, but any error from
// an async method could not be caught!
http.createServer(function(req, res) {
throw Error("An unhandled error happens!");
}).listen(1234);
}catch (e){
console.log("An unhandled error caught!")
}
console.log('Server is listening to port 1234');
所以,我是在错误的处理,以确保服务器没有停止的正确方向?还是有其他一些机制可以让服务器从错误中恢复?
感谢您的回答,我会尝试 – Shuping
我不得不说我的示例只处理HTTP流内发生的错误(如路由处理程序和中间件)。在流程之外发生的任何错误(如Gabriel所称的'全球域名')不会被捕获,并且仍然需要您处理它们(最好使用Gabriels答案中描述的域名)。 – robertklep