2013-12-19 29 views
4

我试图找到处理连接错误或任何其他导致服务器崩溃的全局错误的最佳位置。Sails - 捕获服务器崩溃的全局适配器错误

捕捉适配器/全局错误并使它们不会使服务器崩溃的正确位置是什么?

具体来说,我想在一个优雅的方式来处理这些类型的错误:

Error spawning mySQL connection: 
error: Hook failed to load: orm (Error: connect ECONNREFUSED) 
error: Error encountered while loading Sails core! 
error: Error: connect ECONNREFUSED 
+0

http://stackoverflow.com/questions/7310521/node-js-best-practice-exception-handling? ** tl; dr **使用'try {} catch' – brandonscript

+0

@ r3mus - 虽然这是来自sails的一个错误,但我不知道如何将它包装在我的代码中,它不能连接到db, t启动ORM,我想妥善处理 – Madd0g

+0

哦,你必须找到Sails生成的实际文件并手动添加它(我相信?)我对Sails非常陌生;) – brandonscript

回答

3

从帆文档:http://sailsjs.org/#!documentation/config.500

这就是错误处理帆从配置

内公开如果你的错误通过了,你可以挂在那里,否则你可以挂钩节点的进程

process.on('uncaughtException', function (err) { 
    if (err.toString() === 'Error spawning mySQL connection') { 
    //rende some error page 
    } 
}) 

如果抛出的异常是异步只有这样,才能抓住它是低谷的过程

但是做笔记,这些类型的错误几乎都是不可恢复的,所以崩溃(并重新启动)是最好的办法

大多数加载的模块使用本地变量,只公开其内部子集的一部分module.exports,卸载模块并重新启动其本地代码可以完成,但是您需要卸载所有依赖模块和所有模块以及引用它的所有模块。这就是为什么正常的做法是让它崩溃

+0

只是让它崩溃?我不习惯,但确定:) – Madd0g

+0

@ Madd0g好,如果你可以从一个异常恢复,那么一定要抓住它。但是,如果你无法恢复它们,也无法捕捉它(maby log并提供最后一个度假错误页面,但然后重新启动) –