エラー処理
GraphQLサーバーと同様に、Relay Resolversはフィールドレベルのエラー処理をサポートしています。個々のリゾルバーがエラーをスローした場合、そのフィールドが読み取られると、Relayはそのエラーを環境のユーザー提供のrelayFieldLogger
ロガーにログし、フィールドはnullになります。
これは、GraphQLサーバーとの重要な対称性を提供します。リゾルバーは、チームがリゾルバーを使用してクライアント側で定義されたフィールドから開始し、最終的にサーバーに移行できるように、スムーズな移行パスを可能にするように設計されています。
リゾルバーがエラーをスローした場合、Relayはユーザーが提供したエラーロガーにエラーをログし、リゾルバーが定義するフィールドにはnullを返します。実行時にこの動作を有効にするために、Relayコンパイラはリゾルバーフィールドをnull以外の型として型指定することを許可しません。
relayFieldLogger
に渡されるオブジェクトは、次の形状になります。
type ResolverErrorEvent = {
kind: 'relay_resolver.error',
// The name of the fragment/query in which the field was read
owner: string,
// The path from the owner root to the field which threw the error
fieldPath: string,
// The error thrown by the resolver
error: Error,
}
ロガーの例を次に示します。
function fieldLogger(event) {
if(event.kind === "relay_resolver.error") {
// Log this somewhere!
console.warn(`Resolver error encountered in ${event.owner}.${event.fieldPath}`)
console.warn(event.error)
}
}
const environment = new Environment({
network: Network.create(/* your fetch function here */),
store: new LiveResolverStore(new RecordSource()),
relayFieldLogger: fieldLogger
});
注記
ライブリゾルバーは、最初に評価されるとき、またはその.read()
メソッドが呼び出されるときに、エラーをスローする可能性があります。どちらの種類のエラーも、Relayによって同じように処理されます。