2

我寫一個Node.js應用程式,以及其內部的代碼塊中的一個各種異常可能會拋出(由第三方代碼我叫)。現在我想對這些異常反應,所以我做的:如何檢查JavaScript中的特定異常?

try { 
    // Call 3rd party code 
} catch (e) { 
    // Handle e 
} 

基本上,這工作得很好,但是......我怎麼不同的異常之間有什麼不同?

他們都不幸地Error作爲構造,因此這是沒有可行的方法。我可以使用message屬性,但當然這不是最好的方式(因爲我依賴於事實的消息永遠不會改變,這就是 - 恕我直言 - 比構造的變化更可能)。

任何想法?

PS:具體 - 我需要在SSL錯誤反應,同時試圖做一個tls.connect。我如何檢測到這是一個SSL錯誤?

+1

那麼如果只是一個特定的消息區別於其他錯誤,你不能 – Esailija

+1

唯一的方法來檢查是使用字符串比較和/或正則表達式詢問'message'。 – jbabey

+0

不tls.connect發射'錯誤'事件,而不是拋出一個exeption? – soulcheck

回答

2

大部分包含在javascript錯誤對象中的系統級錯誤的錯誤將會有一個code屬性和errno您可以比較。該列表被定義爲in uv.h in the node.js source code。這可能是你的第二選擇,其中優選

  1. 的instanceof在可能的情況
  2. codeerrno
  3. message

但事實是,有時你不得不看message。鑑於javascript的動態和寬鬆輸入以及異常在node.js中不起重要作用這一事實,在某些情況下,檢查郵件是最好的。

0

我不建議在使用節點一個try/catch結構,因爲我不認爲它會因工作節點的異步性(除非你使用基本同步代碼)。

假設你正在使用異步函數/包,你可能有更多的運氣檢查回調函數的ERR狀態。