mas*_*ari 5 annotations graphql nestjs
我需要为我的 graphql 类型创建自定义分页结果。
这是我PaginateResult
的@ObjectType
:
@ObjectType()
export class PaginateResult<T> {
@Field()
docs: T[];
@Field()
totalDocs: string;
@Field()
totalPages: string;
}
Run Code Online (Sandbox Code Playgroud)
及其在解析器中的调用:
@Query((type) => PaginateResult<User>, { nullable: true })
async getUsers(@Args({ type: () => GetAllUserArgs }) args: GetAllUserArgs) {
const queryResolver: QueryResolver = new QueryResolver(args);
return this.userService.getAll(queryResolver.query);
}
Run Code Online (Sandbox Code Playgroud)
和User
@ObjectType
@ObjectType()
export class User {
@Field(() => ID)
id: string;
@Field()
fullName: string;
@Field()
companyName: string;
@Field()
mobile: string;
@Field({ nullable: true })
profilePhoto?: string;
@Field()
isActive: boolean;
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,我收到此错误:
错误:未定义的类型错误。确保为“PaginateResult”类的“docs”提供显式类型。
小智 9
您必须定义 PaginateResult 类型:
import { Field, Int, ObjectType } from '@nestjs/graphql';
import { Type } from '@nestjs/common';
export function PaginateResult<T>(ItemType: Type<T>): any {
@ObjectType({ isAbstract: true })
abstract class PageClass {
@Field(() => [ItemType])
docs: T[];
@Field(() => Int)
totalPages: number;
}
return PageClass;
}
Run Code Online (Sandbox Code Playgroud)
使用通用函数工厂创建专用类型类:
import { User } from './user.model';
import { ObjectType } from '@nestjs/graphql';
import { Paginated } from 'src/types/paginated-result.type';
@ObjectType()
export class UserPage extends PaginateResult(User) {}
Run Code Online (Sandbox Code Playgroud)
并在解析器中调用它
@Query(() => UserPage)
async getUsers(
@Args() args: GetAllUserArgs,
): Promise<UserPage | HttpException> {
return this.usersService.getAll(args);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1849 次 |
最近记录: |