繁体   English   中英

在SailsJS中处理异常的最佳实践

[英]Best practices to handle exception in SailsJS

我几天前才开始尝试SailsJS。
我已经意识到,只要有未捕获的异常,Node就会终止。
我有一个控制器列表,每个控制器都在services /中调用特定的服务JS文件(包含逻辑和DB调用)。
我可以为所有服务编写一个全局错误处理程序,以便由这些服务处理从这些服务发生的任何类型的错误,并且必须将适当的错误响应传达给前端。

我尝试使用process.on('uncaughtexception')或一些基本异常,但需要将其添加到每个服务方法中。

我也可以为从客户端到服务器的所有服务调用提供一个共同点,所有io.socket.post()和io..socket.get()都通过该点

我将不胜感激任何向我展示在SailsJS中处理未捕获的异常并使用较短代码而不是在所有服务中编写冗余代码的常见最佳实践的指针/文章。

最佳实践是在控制器中使用 这将处理异步代码中的异常及其相对简单的方法。

您可以使用trycatch之类的方法来简化一些操作,但是基于域的异常将是最有效的。 这将确保异常不会使您的应用程序崩溃。 只需在控制器中创建一个新域,然后在该域中运行控制器方法。

基于express的Sailsjs可以使用连接中间件,并且可以从中间件无缝创建新域。 有诸如express-domain-middleware之类的东西。 这可能是最美观的选择,也是最方便的选择。

更新: 正如Benjamin Gruenbaum提到的那样,计划在node v1中弃用Domains。 也许您应该阅读Joyents错误处理最佳实践 它与您使用的框架无关。

此外,您仍然可以使用Domains,否则将无法全局处理node.js中的错误。 一旦弃用,您总是可以相对轻松地消除对域的依赖。 也就是说,最好不要仅依赖域。

Strongloop还提供了一个受区域启发的库,称为Zone 这也是一个选择。

可以让节点实例由于编程错误而出错,这是可以的,否则它可能会以不一致的状态和混乱的业务逻辑继续进行。 在生产环境中,服务器可以在崩溃时重新启动,如果错误不经常发生,这将重置其状态并保持可用。 在所有方面,记录所有内容非常重要。 这适用于大多数Node设置,包括SailsJS。

可以采用以下方法:

  1. 使用记录器:服务器组件应该可以访问专用的记录器。 应该连接到通知开发人员(电子邮件?)非常严重的错误的服务。
  2. 将每个请求的错误传播到末尾:认真转发请求处理中任何步骤中的错误。 在基于ExperssJs / ConnectJs /中间件的设置中, next(err)可用于将错误传递给中间件链。 链末尾捕获中间件的错误将得到此错误,将其记录为冗长,然后将状态500发送回去。 您可以使用Domains或“ Zones ,“ Promises或“ async或任何您喜欢的处理请求和捕获错误的方法。
  3. 关闭process.on('uncaughtexception') :记录erorr,进行必要的清理,然后再次将相同的错误抛出给关闭进程。
  4. Linux上的用户PM2 / Forever或Upstart / init.d:现在,由于严重异常而导致进程关闭时,这些工具将重新启动该进程并跟踪服务器崩溃的时间。 如果服务器崩溃的时间太多了,最好停止它并立即采取措施。

我没有尝试过,但是我相信您应该能够使用process.on('uncaughtexception')在bootstrap.js中设置一个包罗万象的异常处理程序。

我个人通过bluebird库使用promise,并放置了一条catch语句,该语句将所有错误传递给全局错误处理函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM