MEAN 堆栈中的整个应用程序因单个错误而崩溃

Whole app in MEAN stack crashes for a single bug

我正在使用 MEAN 堆栈开发 Web 应用程序。当代码中出现错误时,整个应用程序崩溃,我必须重新启动服务器(重新 运行 应用程序)。

此行为在开发过程中可能不是问题。但是当应用程序进入生产环境时,如果出现一些意想不到的错误,整个应用程序就会崩溃。我必须时刻关注系统并在出现错误时重新启动它?我在这里错过了什么?

这是我在生产中看到的一种解决方案,可确保节点程序始终 运行ning(即使在服务器重新启动后)。

永远使用(https://www.npmjs.com/package/forever)。您可以通过代码或命令行 运行 它。

 $ [sudo] npm install forever -g
 forever start app.js

其中 app.js 包含用于实例化 Web 服务器的代码(在 MEAN 堆栈中,它是快速初始化)。

如果未处理的错误冒泡到堆栈的顶部而没有被捕获,则崩溃是预期的行为。未处理的异常意味着您的应用处于未定义状态。

这样想。如果您失去对汽车的控制并驶离道路,最好的办法是猛踩刹车并停车(也称为受控程序 crashhalt) 而不是继续盲目地在树叶、花坛、后院、游泳池、蹒跚学步的孩子和任何其他障碍物中徘徊。

我建议使用 forever 之类的工具来 运行 您的生产应用,它会在应用崩溃时监控并重启您的应用。这种事情是标准做法。显然你不希望它崩溃,你应该在你知道如何从错误中恢复的上下文中处理错误。一些框架比其他框架更能顺利地处理错误而不会崩溃。重新启动该过程主要最适合让您完全措手不及的事情。查看此以获取更多错误处理提示:

https://www.joyent.com/developers/node/design/errors

您提到的问题是您在开发应用时需要注意的问题。因为处理错误的方式是你不能跳过的。您可以使用一些有用的解决方案(只是整个 'Error Handling' 世界的一小部分)来保存您的应用程序。

但是让我们从您的问题开始。由于您已经有这种情况,我可以建议您将节点域模块集成到您的应用程序中,这样它就不会在出现此类异常时崩溃。请参考下面的link:

https://nodejs.org/api/domain.html

您可以包装您的服务器创建并捕获所有未处理的异常。

示例:

var domain = require('domain').create();

domain.on('error', function(err){
  //track error into your log file
  //do something else with error (send message to admin, send error response etc. )
});

domain.run(function(){
  //run http server here
});

在这里你也可以找到很好的例子:

https://engineering.gosquared.com/error-handling-using-domains-node-js

至于错误处理解决方案,我建议您遵守以下规则:

  • 使用域来捕获异常
  • 使用节点 eventemitter 事件和捕获异常
  • 在处理函数结果时,请始终考虑可能出现的情况
  • 开发单一的错误处理策略(向用户抛出 error/return error/send 错误等)
  • 使用 try catch 块来保护代码块免受未处理异常的影响

您可以找到更多的解决方案。

请参阅我推荐您检查的link: