.intercept()
指定されたエラーを捕捉し、インターセプトします。自動的に修正して再スローするか、代わりにスローする新しいエラーを指定します。(それでもスローされます。)
.intercept(filter, handler)
または
.intercept(handler)
(すべてのエラーをインターセプトする場合)引数 | 型 | 詳細 | |
---|---|---|---|
1 | filter | インターセプトするエラーのコード、またはインターセプトするエラーを識別するための条件の辞書。(指定しない場合、すべてのエラーがインターセプトされます。) | |
2 | handler | 予期されるエラーがスローされた場合にSailsが自動的に呼び出すプロシージャパラメータです。「Handler」の使用例表で指定された引数を受け取ります。ハンドラーは、修正されたError、新しいError、または(該当する場合)特別な終了シグナルを返す必要があります。 関数ではなく、文字列を指定することもできます。これは、単に文字列を返すハンドラー関数を渡すことと同じです。(actions2を使用する場合に便利です。) |
引数 | 型 | 詳細 | |
---|---|---|---|
1 | err | インターセプトされる予期されるError。 |
インターセプトされたエラーをスローする代わりに、元のロジックからスローされる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アクション内で、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()
の動作に関する詳細な例と説明については、この関連する会話をご覧ください。