gpt4 book ai didi

javascript - 使用@nestjs/graphql 使用@ResolveProperty 和@Resolvers 创建嵌套查询

转载 作者:行者123 更新时间:2023-12-04 14:55:11 26 4
gpt4 key购买 nike

引用 NestJS 存储库中的 type-graphql 示例存储库 here我想知道如何在查询的深处再创建两层。

目前它已设置为查询食谱,我能够添加另一个 @ObjectType 类

@ObjectType()
export class Author {
@Field(type => Int)
id: number;

@Field({ nullable: true })
firstName?: string;

@Field({ nullable: true })
lastName?: string;
}

并在配方解析器中创建了一个@ResolveProperty:

@ResolveProperty('author', type => Author)
async getAuthor(@Parent() recipe) {
console.log('Resolver auth in recipe', recipe);
// This will be a database call, just mocking data for now.
return Promise.resolve({ id: 1, firstName: 'john', lastName: 'smith' });
}

这一切都很好(我还为作者创建了一个单独的解析器,但它不是我的基本查询,所以我不包括它),使用这个 GraphQL 查询
{
recipe(id: "1") {
title,
author {
firstName
}
}
}

此查询返回
{
"data": {
"recipe": {
"title": "1",
"author": {
"firstName": "john"
}
}
}
}

正如它应该。我现在的问题是如何添加另一个级别?我试图创建一个“发布者”对象类型
@ObjectType()
export class Publisher {
@Field(type => Int)
id: number;
}

但是,在作者和配方解析器中创建解析器或添加 ResolveProperty 的组合都无法使其工作。我应该把解析器代码放在哪里,这样当 GraphQL 解析作者对象时,它也会解析相关的发布者信息。

我的目标是得到它,以便查询,例如:
{
recipe(id: "1") {
title,
author {
firstName,
publisher: {
id
}
}
}
}

会回来
{
"data": {
"recipe": {
"title": "1",
"author": {
"firstName": "jay",
"publisher": {
id: 4
}
}
}
}
}

不确定我是否在考虑这个错误,但这似乎是我缺少能够扩展它的关键想法!谢谢你。

最佳答案

您基本上只需定义一个 AuthorResolver这描述了您将如何使用 Author 进行“工作” .在这个AuthorResolver你会有一个 @ResolveProperty装饰方法,解决您的publisher属性,像这样:

// author.resolver.ts
@ResolveProperty('publisher', type => PublisherObjectType, {})
async resolvePublisher(@Parent() parent: AuthorEntity) {
return parent.getPublisher(); // this method would return your Publisher!
}
请注意,您需要创建自己的 PublisherObjectType (与各自的装饰器)并使其可用..

关于javascript - 使用@nestjs/graphql 使用@ResolveProperty 和@Resolvers 创建嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55998557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com