代码之家  ›  专栏  ›  技术社区  ›  Alan

GraphQL-Prisma-resolvers使用外部API

  •  0
  • Alan  · 技术社区  · 7 年前

    我有这样的模式:

    type Invoice {
      id: ID! @unique
      description: String
      charge: Charge
    }
    
    type Charge {
      id: ID! @unique
      amount: Float
      dataFromAPI: DataFromAPI
    }
    type DataFromAPI {
      id: ID! @unique
      status: String
    }
    

    在查询解析器中,我有:

    async function charge(parent, args, ctx, info) {
      chargeData = await ctx.db.query.charge(args, info)
      chargeData.dataFromAPI = await DO_THE_API_CALL_TO_RETRIEVE_DATA()
      return chargeData
    }
    

    async function invoice(parent, args, ctx, info) {
      invoiceData = await ctx.db.query.invoice(args, info)
      return invoiceData
    }
    

    查询:

    query ChargeQuery {
      charge {
        id
        amount
        dataFromAPI
      }
    }
    

    会回来的

    {
      charge {
        id: '232323'
        amount: 323
        dataFromAPI: 'GREAT! DATA IS FROM API'
      }
    }
    

    query InvoiceQuery {
      invoice {
        id
        description
        charge {
          id
          amount
          dataFromAPI
        }
      }
    }
    

    会回来的

    {
      Invoice {
        id: '7723423',
        description:'yeah',
        charge {
          id: '232323'
          amount: 323
          dataFromAPI: null
        }
      }
    }
    

    dataFromAPI 为空,因为我没有在此解析程序中调用API。 我应该在哪里调用函数 DO_THE_API_CALL_TO_RETRIEVE_DATA() 在每个解析器中?我想这样做是不可行的。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Alan    7 年前

    解决方案是: 我们应该在电脑上使用分解器 .

    type Charge {
      id: ID!
      invoice: Invoice!
      messageErrorPayment: String
      stripeChargeId: String!
      dateErrorPayment: DateTime
      createdAt: DateTime!
      chargeData: ChargeData
    }
    

    /解析程序/index.js

    const { Query } = require('./Query')
    const { Mutation } = require('./mutation/Mutation')
    const { Charge } = require('./Charge')
    
    module.exports = {
      Query,
      Mutation,
      Charge,
    }
    

    费用.js

    async function chargeData(parent, args, ctx, info) {
      return {
        dataFromAPI: await DO_THE_API_CALL_TO_RETRIEVE_DATA()
      }
    }
    
    const Charge = {
      chargeData,
    }
    
    module.exports = {
      Charge,
    }
    

    资料来源: https://www.prisma.io/forum/t/how-to-use-field-resolvers-to-get-aggregates-of-inner-relation-types/2930/2?u=alan345