尽管我在nginx,apache,jboss等服务器方面拥有丰富的经验,但我对nodejs服务器非常陌生(我对socket.io功能感兴趣)。我发现很奇怪,像object.MyProperty(未定义)等意外数据 - 在我看来这是微不足道的,导致整个服务器崩溃(它不会崩溃该客户端请求,但整个服务器崩溃!)和你需要重启服务器。
我不确定是不是因为我处于开发模式,或者它也会像现场模式那样。当它崩溃时,所有运行时数据都会丢失。 我的问题是,我该怎么做才能确保服务器没有崩溃,但它可以像在其他服务器中一样将问题写入日志文件。
非常感谢任何帮助。
答案 0 :(得分:2)
您可以使用try
catch
块。 log
下的catch
。
<强>更新强>
此外,Node
是基于单个进程的,未捕获的异常会导致崩溃(该进程)。建议的方法之一是使用domains
。
例如:
domain = require('domain'),
d = domain.create();
d.on('error', function(err) {
console.error(err);
});
d.run(function() {
...
Ref.是一篇很好的文章,简要解释了解决问题的各种方法。
答案 1 :(得分:1)
process.on('uncaughtException', function (err) {
console.error((new Date).toUTCString() + ' uncaughtException:', err.message)
console.error(err.stack)
})
由于nodejs是单个进程服务器,因此您可以将此代码放在js脚本中的任何位置,以便充当未处理/意外错误的全部捕获。
答案 2 :(得分:0)
我认为您正在寻找https://github.com/foreverjs/forever。 Forever永远运行脚本,并在发生崩溃时重新启动它,无需用户干预。
您可以使用npm永久安装。安装后,您可以使用forever start <path/to/script>
运行nodejs脚本。 forever list
将列出所有当前正在运行的脚本,forever stop <script-id>
将停止给定的脚本。
请记住,使用此并不意味着您不必进行适当的异常处理。根据需要实现try...catch
语句并处理代码中的所有异常。
答案 3 :(得分:0)