本文へスキップ
バージョン: v18.0.0

エラー処理

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によって同じように処理されます。