在Java中,我习惯尝试.catch,最后清理未使用的资源。
在Node.JS中,我没有这种能力。
可能会出现奇数错误,例如数据库可能随时关闭,任何单个表或文件都可能丢失等等。
对db.query(..., function(err, results){...
进行嵌套调用,每次调用if(err) {send500(res); return}
变得非常繁琐,尤其是,如果我必须清理资源,例如db.end()
肯定会适当的。
如何编写使异步捕获并最终阻止两者的代码?
我已经知道重启过程的能力,但我想将其作为最后的手段使用。
答案 0 :(得分:1)
对此的完整答案非常深入,但它是以下的组合:
error
位置参数。在这里加倍应该是你的第一步。
process.on('uncaughtExcepton')
try/catch
用于偶尔引发异常的同步API。很少见,但有些图书馆会这样做。这是一个例子。用例是由数据库支持的REST / JSON API。
//shared error handling for all your REST GET requests
function normalREST(res, error, result) {
if (error) {
log.error("DB query failed", error);
res.status(500).send(error);
return;
}
if (!result) {
res.status(404).send();
return;
}
res.send(result); //handles arrays or objects OK
}
//Here's a route handler for /users/:id
function getUser(req, res) {
db.User.findById(req.params.id, normalREST.bind(null, res));
}
我认为我的内容是整体上在JavaScript本身,错误处理基本上是不充分的。在浏览器中,您刷新页面并继续您的生活。在节点中,它更糟糕,因为您正在尝试编写一个健壮且长期存在的服务器进程。有一个completely epic issue comment on github详细说明了事情是如何从根本上被打破的。我不希望你拥有可以指出的JavaScript代码并说“Look,Ma,最先进的错误处理”。也就是说,在实践中,如果你遵循我上面列出的观点,根据经验,你可以编写足够强大的程序来制作。