2013-12-19 71 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並提供最後一個度假錯誤頁面,但然後重新啓動) –