.intercept()
捕捉並攔截指定的錯誤,自動修改並重新拋出,或指定一個新的錯誤來取代拋出。(仍然會拋出錯誤。)
.intercept(filter, handler)
或
.intercept(handler)
(攔截所有錯誤)引數 | 類型 | 詳細資訊 | |
---|---|---|---|
1 | filter | 您想要攔截的錯誤代碼,或用於識別要攔截錯誤的條件字典。(如果未提供,將攔截「所有」錯誤。) | |
2 | handler | 一個程序參數,當預期的錯誤被拋出時,Sails 會自動呼叫它。它將接收下方「Handler」用法表格中指定的引數。處理常式應傳回修改後的 Error、新的 Error,或(如果適用)特殊的退出訊號。 或者,可以提供字串來代替函式。這相當於傳入一個處理常式函式,該函式僅傳回字串。(當使用 actions2 時很方便。) |
引數 | 類型 | 詳細資訊 | |
---|---|---|---|
1 | err | 被攔截的預期錯誤。 |
傳回一個 Error 實例,或(如果適用)一個特殊的退出訊號,它將從原始邏輯中拋出,而不是拋出被攔截的錯誤。
.intercept() 用於攔截某種類型的錯誤(或所有錯誤)。如果您鏈式調用 .intercept(),並且它與發生的錯誤匹配,則底層邏輯將會拋出錯誤。但它拋出的內容取決於您的處理常式函式傳回的內容。
如果應用程式中的每個使用者記錄都需要有一個唯一的電子郵件地址,您可能需要確保錯誤的格式設定方式,以便向最終使用者顯示適當的訊息。要攔截該錯誤
var newUserRecord = await User.create({
emailAddress: inputs.emailAddress,
fullName: inputs.fullName,
})
.intercept('E_UNIQUE', ()=>{ return new Error('There is already an account using that email address!') })
.fetch();
或者,要在 actions2 action 內處理相同的錯誤,使用特殊的退出訊號;而不是 Error 實例
var newUserRecord = await User.create({
emailAddress: inputs.emailAddress,
fullName: inputs.fullName,
})
.intercept('E_UNIQUE', ()=>'emailAlreadyInUse')
.fetch();
請注意,我們上面範例中的用法也可以更簡潔地寫成
.intercept('E_UNIQUE', 'emailAlreadyInUse')
或較不簡潔地寫成
.intercept({ code: 'E_UNIQUE' }, ()=>{ return 'emailAlreadyInUse'; })
有關
.intercept()
如何運作的更多範例和進一步說明,請查看這個相關的對話。