gpt4 book ai didi

node.js - 在全局级别处理错误

转载 作者:搜寻专家 更新时间:2023-11-01 00:41:34 25 4
gpt4 key购买 nike

我想了解如何为我的 api 构建错误处理系统。

假设我在 Controller 方法中有以下行:

  var age = json.info.age; 

json = {"id":1, "name":"John", info": {"age":27, "sex":"m"}}

假设对象不包含 info 字段,我将收到以下错误 TypeError: Cannot read property 'info' of undefined 和我的服务器会崩溃。

有没有办法进行更高级别的抽象并捕获我可能遇到的所有潜在错误?或者我应该为我的 Controller 的每个方法设置一个 try/catch 系统吗?

最佳答案

小心下面的代码,它会随时咬你!

Don't use the code snippet below if you do not understand its implications, please read the whole answer.


对于 Uncaught Error ,您可以使用 Node 方式。将此添加到您的 config/bootstrap.js

更新了下面的代码片段以添加评论中所说的内容,还添加了关于使用全局响应用户的警告。

process.on('uncaughtException', function (err) {
// Handle your errors here

// global.__current__ is added via middleware
// Be aware that this is a bad practice,
// global.__current__ being a global, can change
// without advice, so you might end responding with
// serverError() to a different request than the one
// that originated the error if this one happened async
global.__current__.res.serverError();
})

现在,可以并不意味着应该。这实际上取决于您的需求,但不要试图在代码中捕获 BUGS,尝试在 Controller 级别捕获可能不会每次都发生但在某种程度上可以预料到的问题,例如第三方以空数据响应的服务,你应该在你的 Controller 中处理它。 uncaughtException 主要用于日志目的,如果有错误最好让您的应用程序崩溃。或者您可以做一些更复杂的事情(恕我直言,这可能更好),即停止接收请求,向请求错误端点的用户响应错误 500(或自定义错误),并尝试完成其他请求与该 Controller 无关,然后登录并关闭服务器。您将需要多个风 sails 运行实例以避免零停机时间,但这对另一个问题很重要。你问的是如何在比 Controller 更高的级别上获得未捕获的异常。

I suggest you read the node guide for error handling

Also read about domains ,即使它们已被弃用,您也可以使用它们,但您必须在每个 Controller 操作中处理它们,因为 sails 对此不提供任何帮助。

希望对你有帮助。

关于node.js - 在全局级别处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32481496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com