簡體   English   中英

如何在graphql-compose中使用自定義輸入類型?

[英]How to use custom input type in graphql-compose?

我正在使用 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但是我沒有任何關於如何在解析器中使用它的例子。

通過一些試驗和錯誤,我發現了這一點:

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'
      }
  }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM