具有mongoose关系的TypeGraphQL字段解析器

b5buobof  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(105)

我在使用TypeGraphQL填充字段时遇到了麻烦。
情况摘要举例:

TypeGraphQL

TypeDef

@ObjectType()
class User {
  ...
}

@ObjectType()
class Post {
  ...

  @Field()
  user: User
}

字符串

解析器

import { Post, User } from '@/models' // mongoose schema 

@Resolver(() => Post)
class PostResolver {
  @Query(() =>. Post)
  async getPost(id: string) {
    return await Post.findById(id);
  }

  ...
  
  @FieldReoslver(() => User) 
  async user(@Root() post: Post) {
    return await User.findById(post.user) // Error Occurs here.
  }
}

Mongoose

PostSchema

const PostSchema = new Schema({
  ...

  user: {
    type: Schema.ObjectId,
    ref: "User",
  }
})


我想在请求数据Post时填充user字段,字段类型为User
所以,我像上面一样使用了@FieldResolver,但是我遇到了类型错误,因为post.userUser的类型,而不是mongoose的ObjectId
在执行getPost解析器时,user字段首先是ObjectId类型,但我希望在客户端获得响应时将此字段填充为User
我该怎么熬过去?
先谢了。

bksxznpy

bksxznpy1#

这是一篇很老的文章了,也许你已经有答案了。或许这能帮到别人。
在TypeGraphQL typeDef中,user的类型必须是string。它不能是“用户”类型。
此外,FieldResolver的名称需要不同于user。然而,这不会遵循正常模式。
所以也许在你的typeDef中将post.user改为post.userId。然后,FieldResolver将为post.user返回一个“User”类型,允许您使用可读的GraphQL查询。
post.user._id应该可以工作。

相关问题