【问题标题】:How to use custom input type in graphql-compose?如何在graphql-compose中使用自定义输入类型?
【发布时间】:2020-04-20 11:42:33
【问题描述】:

我正在使用 mongodb 和 graphql-compose-mongoose 来生成 Graphql 架构。但是,我正在添加身份验证突变,并且我想为其中一个查询添加 graphql 输入。我在文档中看到args.filter 可以接收输入:

CityTC.addResolver({
  kind: 'query',
  name: 'findMany',
  args: {
    filter: `input CityFilterInput {
      code: String!
    }`,
    limit: {
      type: 'Int',
      defaultValue: 20,
    },
    skip: 'Int',
    // ... other args if needed
  },
  type: [CityTC], // array of cities
  resolve: async ({ args, context }) => {
    return context.someCityDB
      .findMany(args.filter)
      .limit(args.limit)
      .skip(args.skip);
  },
});

但是我没有使用任何过滤器。我想创建这样的输入:

const AuthPayloadTC = schemaComposer.createObjectTC({
  name: 'AuthPayloadTC',
  fields: {
      jwtToken: 'String!'
  }
});

AuthPayloadTC.addResolver({
  name: 'userConnectData',
  type: AuthPayloadTC,
  args: `input {
    accessToken String!
    provider String!
  }`,
  resolve: async ({ source, args, context, info }) => {
      const { accessToken, provider } = args;
      return {
          jwtToken: '12345678'
      }
  }
})

这不起作用,因为我的输入没有被解析为args 字段所期望的那种对象。我确实注意到 graphql-compose 公开了 InputTypeComposer 但是我没有任何关于如何在解析器中使用它的示例。

【问题讨论】:

    标签: javascript graphql graphql-compose-mongoose graphql-compose


    【解决方案1】:

    经过反复试验,我发现了这一点:

    import { schemaComposer, toInputObjectType } from 'graphql-compose'
    
    const InputTC = schemaComposer.createObjectTC({
      name: 'UserConnectDataInput',
      fields: {
        accessToken: 'String!'
      }
    });
    
    const InputITC = toInputObjectType(InputTC);
    
    AuthPayloadTC.addResolver({
      name: 'userConnectData',
      type: AuthPayloadTC,
      args: {
        input: InputITC
      },
      resolve: async ({ source, args, context, info }) => {
          const { accessToken, provider, email } = args;
          return {
              jwtToken: '12345678'
          }
      }
    })
    

    【讨论】:

    • 这可以通过使用schemaComposer.createInputTC({...})来缩短。您可能知道,您也不需要使用 const InputITC 定义它 - 您可以使用 args: {input: 'UserConnectDataInput'}
    猜你喜欢
    • 2021-03-10
    • 2020-03-21
    • 2019-04-03
    • 2017-06-04
    • 2018-01-02
    • 2020-12-19
    • 2020-01-04
    • 2019-10-19
    • 2021-08-31
    相关资源
    最近更新 更多