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 堆栈中,它是快速初始化)。
如果未处理的错误冒泡到堆栈的顶部而没有被捕获,则崩溃是预期的行为。未处理的异常意味着您的应用处于未定义状态。
这样想。如果您失去对汽车的控制并驶离道路,最好的办法是猛踩刹车并停车(也称为受控程序 crash 或 halt) 而不是继续盲目地在树叶、花坛、后院、游泳池、蹒跚学步的孩子和任何其他障碍物中徘徊。
我建议使用 forever 之类的工具来 运行 您的生产应用,它会在应用崩溃时监控并重启您的应用。这种事情是标准做法。显然你不希望它崩溃,你应该在你知道如何从错误中恢复的上下文中处理错误。一些框架比其他框架更能顺利地处理错误而不会崩溃。重新启动该过程主要最适合让您完全措手不及的事情。查看此以获取更多错误处理提示:
您提到的问题是您在开发应用时需要注意的问题。因为处理错误的方式是你不能跳过的。您可以使用一些有用的解决方案(只是整个 '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:
我正在使用 MEAN 堆栈开发 Web 应用程序。当代码中出现错误时,整个应用程序崩溃,我必须重新启动服务器(重新 运行 应用程序)。
此行为在开发过程中可能不是问题。但是当应用程序进入生产环境时,如果出现一些意想不到的错误,整个应用程序就会崩溃。我必须时刻关注系统并在出现错误时重新启动它?我在这里错过了什么?
这是我在生产中看到的一种解决方案,可确保节点程序始终 运行ning(即使在服务器重新启动后)。
永远使用(https://www.npmjs.com/package/forever)。您可以通过代码或命令行 运行 它。
$ [sudo] npm install forever -g
forever start app.js
其中 app.js 包含用于实例化 Web 服务器的代码(在 MEAN 堆栈中,它是快速初始化)。
如果未处理的错误冒泡到堆栈的顶部而没有被捕获,则崩溃是预期的行为。未处理的异常意味着您的应用处于未定义状态。
这样想。如果您失去对汽车的控制并驶离道路,最好的办法是猛踩刹车并停车(也称为受控程序 crash 或 halt) 而不是继续盲目地在树叶、花坛、后院、游泳池、蹒跚学步的孩子和任何其他障碍物中徘徊。
我建议使用 forever 之类的工具来 运行 您的生产应用,它会在应用崩溃时监控并重启您的应用。这种事情是标准做法。显然你不希望它崩溃,你应该在你知道如何从错误中恢复的上下文中处理错误。一些框架比其他框架更能顺利地处理错误而不会崩溃。重新启动该过程主要最适合让您完全措手不及的事情。查看此以获取更多错误处理提示:
您提到的问题是您在开发应用时需要注意的问题。因为处理错误的方式是你不能跳过的。您可以使用一些有用的解决方案(只是整个 '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: