代码之家  ›  专栏  ›  技术社区  ›  Gareth Jeanne

无法将GraphQL瑜伽上的片段与Primsa一起使用

  •  2
  • Gareth Jeanne  · 技术社区  · 6 年前

    我正在使用带有Prisma和Prisma绑定的graphql瑜伽

    我正在尝试向解析器添加一个片段,以便在用户请求自定义字段costsToDate时始终获取特定字段(在这种情况下为id)。

    这样我就可以进行一些额外的查询来构建该字段的结果,并且我需要该字段的对象ID。

    不幸的是,我似乎无法让它发挥作用,而且文档似乎有点缺乏graphql瑜伽和Prisma的细节。

    以下是类型的定义:

    type Job {
        id: ID!
        projectNumber: String!
        client: Client!
        name: String!
        description: String
        quoteNumber: String
        workshopDaysQuoted: String!
        quoted: String!
        targetSpend: String!
        costs: [JobCost!]!
        estimatedCompletion: DateTime
        completed: Boolean!
        costTotal: String
        workshopDaysUsed: String
        costsToDate: String
    }
    

    const jobs = {
        fragment: `fragment description on Jobs { id }`,
        resolve: jobsResolver
    }
    
    async function jobsResolver(root, args, context, info) {
        await validatePermission(args,context,info,['admin','user','appAuth'])
        const {showCompleted} = args
        const completedFilter = (typeof showCompleted === 'boolean') ? { completed: showCompleted } : {}
        const jobIDS = await context.db.query.jobs({ where: completedFilter }, `{ id }`)
        //console.log(jobIDS);
        let jobs = await context.db.query.jobs({
            where: completedFilter
        }, info)
        return  await getAllJobCostsToDateList(jobs)
    }
    

    我正在按照下面的说明应用碎片替换。

    const fragmentReplacements = extractFragmentReplacements(resolvers)
    
    console.log(fragmentReplacements)
    
    const port = process.env.PORT || 3010
    
    const graphQLServer = new GraphQLServer({
        typeDefs: './src/schema.graphql',
        resolvers,
        resolverValidationOptions: {
            requireResolversForResolveType: false
        },
        context: req => ({
            ...req,
            db: new Prisma({
                typeDefs: `src/generated/prisma.graphql`,
                fragmentReplacements,
                endpoint: PRISMA_ENDPOINT,
                secret: PRISMA_KEY,
                debug: false
            })
        })
    })
    

    如果我将fragmentReplacements对象记录到console.log中,我会得到以下结果,因此它看起来确实在收集片段。

    [ { field: 'job', fragment: 'fragment costsToDate on Job { id }' },
      { field: 'jobs',
        fragment: 'fragment costsToDate on Jobs { id }' } ]
    

    因此,我在这里的期望是,如果我对作业或要求costsToDate字段的作业进行查询,它也将获取作业/每个作业的id。

    query{
      jobs{
        description
        costsToDate
      }
    }
    

    但是我没有看到提取的id,解析器函数的根参数中也没有任何内容。

    道歉,因为我可能是完全错误的树皮树在这里,似乎是一个有点简单的要求,但我不能完全解决它。我确实错过了一些基本的东西。

    加雷斯

    1 回复  |  直到 6 年前
        1
  •  0
  •   Errorname    6 年前

    一块碎片被用来 检索 .

    其格式如下:

    fragment NameOfYourFragment on YourType { ... }
    

    Jobs ,但Prisma使用的类型名称为 Job job jobs 分解器)

    您可能只需要以下解析器:

    const job = {
      fragment: `fragment JobId on Job { id }`,
      resolve: jobsResolver
    }