graphsql-組合せCustom Lezoverにコールバックタイプを追加
13582 ワード
graphql-compose
graphql-ノードを合成します.jsで複雑なgraphqlアーキテクチャを構成するのに役立つライブラリです.
シナリオを構成するために、複数のResolverとタイプのシナリオが用意されています.
クストム・リゾフのタイプ
graphql-コンビネーションによって提供されるコールバックタイプではなく、ユーザー自身が構成するコールバックタイプを指定する必要があります.
Custom Lezooverで作成したモデルタイプ情報ではなく、いくつかの情報だけを返す場合は、タイプを指定するのが難しいという欠点があります.typeをJSONに指定すると、グラウンドで目的の情報を取得するのが難しいということです.
これらの欠点を補うために,いくつかの研究を行い,createObjectTC文書により答えを得た.
既存のコード
最初はタイプ指定ができなかったため、JSONタイプに戻り、グラウンドなどでテストを行った場合、必要なデータだけを受信することができませんでした.
createObjectTCを使用して修正されたコード
タイプがJSONに指定されている場合とは異なり、queryに返されるデータの一部のみを受信できます.
graphql-ノードを合成します.jsで複雑なgraphqlアーキテクチャを構成するのに役立つライブラリです.
シナリオを構成するために、複数のResolverとタイプのシナリオが用意されています.
クストム・リゾフのタイプ
graphql-コンビネーションによって提供されるコールバックタイプではなく、ユーザー自身が構成するコールバックタイプを指定する必要があります.
Custom Lezooverで作成したモデルタイプ情報ではなく、いくつかの情報だけを返す場合は、タイプを指定するのが難しいという欠点があります.typeをJSONに指定すると、グラウンドで目的の情報を取得するのが難しいということです.
これらの欠点を補うために,いくつかの研究を行い,createObjectTC文書により答えを得た.
既存のコード
import { UserProductModel, UserTicketModel } from '~'; // 모델 스키마가 정의되어 있는 파일 루트
import { ProductModelTC } from '~'; // TC 가 정의되어 있는 파일 루트
const name = 'resolverName';
// args에는 해당 리졸버 쿼리를 보낼 때 함께 보내는 argument의 key 네임과 값의 타입을 지정해줍니다.
ProductModelTC.addResolver({
args: {
id: 'String',
},
name,
resolve: async ({ args }: { args: { id?: string } }) => {
const item = await Model.findOne({
uid: args.id,
});
if (!item) {
throw new Error('올바르지 않은 상품 정보입니다. 다시 시도해주세요.');
}
const userTickets = await UserTicketModel.find({
parentPackage: userProductPackage._id,
});
const userProducts = await UserProductModel.find({
parentPackage: userProductPackage._id,
});
return {
userPackage: userProductPackage,
userTickets: userTickets,
userProducts: userProducts,
};
},
type: 'JSON',
});
この左輪ピストルは、モデルを介して必要なデータを受信し、修正および加工されたタイプのデータを返します.最初はタイプ指定ができなかったため、JSONタイプに戻り、グラウンドなどでテストを行った場合、必要なデータだけを受信することができませんでした.
createObjectTCを使用して修正されたコード
import { UserProductModel, UserTicketModel } from '~'; // 모델 스키마가 정의되어 있는 파일 루트
import { ProductModelTC } from '~'; // TC 가 정의되어 있는 파일 루트
import { schemaComposer } from 'graphql-compose';
const name = 'resolverName';
// 리턴될 데이터의 타입을 미리 지정해서, objectTC로 제작합니다.
// userTickets, userProducts의 경우 단일 데이터가 아닌 배열 데이터로 리턴되어 배열([])로 감싸주었습니다.
// 해당 방식으로 데이터의 타입을 지정해 줄 경우, UserTickets의 _id만 받거나, 원하는 일부 데이터만 받아오는 것이 가능해집니다.
const ReturnType = schemaComposer.createObjectTC({
name: 'returnType',
fields: {
userPackage: 'UserProduct',
userTickets: '[UserTicket]',
userProducts: '[UserProduct]',
},
});
ProductModelTC.addResolver({
args: {
id: 'String',
},
name,
resolve: async ({ args }: { args: { id?: string } }) => {
const item = await Model.findOne({
uid: args.id,
});
if (!item) {
throw new Error('올바르지 않은 상품 정보입니다. 다시 시도해주세요.');
}
const userTickets = await UserTicketModel.find({
parentPackage: userProductPackage._id,
});
const userProducts = await UserProductModel.find({
parentPackage: userProductPackage._id,
});
return {
userPackage: userProductPackage,
userTickets: userTickets,
userProducts: userProducts,
};
},
type: ReturnType,
});
createObjectTCによって返される値のパターンが作成され、タイプのパターンが作成されます.タイプがJSONに指定されている場合とは異なり、queryに返されるデータの一部のみを受信できます.
Reference
この問題について(graphsql-組合せCustom Lezoverにコールバックタイプを追加), 我々は、より多くの情報をここで見つけました https://velog.io/@sunnysideup0w0/graphql-compose-커스텀-리졸버에-리턴-타입-추가하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol