gpt4 book ai didi

mongodb - 为 GraphQL 输出解析自动生成的 typescript-mongodb 类型

转载 作者:行者123 更新时间:2023-12-04 10:22:50 25 4
gpt4 key购买 nike

我正在使用 typescript-mongodb插件到 graphql-codegen生成用于从 MongoDB 中提取数据并通过 Node.js 上的 GraphQL 输出的 Typescript 类型。

我的输入 GraphQL 架构如下所示

type User @entity{
id: ID @id,
firstName: String @column @map(path: "first_name"),
...

生成的输出 Typescript 类型看起来正确
export type User = {
__typename?: 'User',
id?: Maybe<Scalars['ID']>,
firstName?: Maybe<Scalars['String']>,
...

以及对应的DB对象
export type UserDbObject = {
_id?: Maybe<String>,
first_name: Maybe<string>,
...

问题是当实际将 mongo 文档作为 UserDbObject 发回时我没有得到输出中映射的字段。我可以编写一个自定义解析器,将字段重新映射回 User类型,但这意味着我在两个不同的地方映射字段。

即我没有从这样的解析器中获取映射字段
  userById: async(_root: any, args: QueryUserByIdArgs, _context: any) : Promise<UserDbObject> => {
const result = await connectDb().then((db) => {
return db.collection<UserDbObject>('users').findOne({'_id': args.id}).then((doc) => {
return doc;
});
})
...
return result as UserDbObject;
}
};

有没有办法使用 typescript-mongodb插件只需要在模式中映射这些字段,然后使用自动生成的代码来解析它们?

最佳答案

您可以使用 mappers codegen 的特性来映射你的 GraphQL 类型和你的模型类型。
看:

  • https://graphql-code-generator.com/docs/plugins/typescript-resolvers#mappers---overwrite-parents-and-resolved-values
  • https://graphql-code-generator.com/docs/plugins/typescript-resolvers#mappers-object

  • 由于所有 codegen 插件都是独立的并且没有链接在一起,因此您应该手动执行,例如:
    config:
    mappers:
    User: UserDbObject

    这将使 typescript-resolvers插件使用 UserDbObject在任何时候(作为父值,或作为返回值)。

    如果您希望自动执行此操作,您可以以编程方式使用代码生成器( https://graphql-code-generator.com/docs/getting-started/programmatic-usage ),或者您也可以创建一个 .js文件而不是 .yaml将根据您的需要创建配置部分的文件。

    关于mongodb - 为 GraphQL 输出解析自动生成的 typescript-mongodb 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60764677/

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