javascript – GraphQL:更新数组

我在解析器中更新数组时遇到了一些问题.我正在使用打字稿进行构建.

描述

我在pramma的datamodel.graphql中:

type Service @model {
    id: ID! @unique
    title: String
    content: String
    createdAt: DateTime!
    updatedAt: DateTime!
    comments: [Comment!]! // Line to be seen here
    author: User!
    offer: Offer
    isPublished: Boolean! @default(value: "false")
    type: [ServiceType!]!
}

type Comment @model {
    id: ID! @unique
    author: User! @relation(name: "WRITER")
    service: Service!
    message: String!
}

Prisma连接到GraphQl服务器,在这一个中,我定义了变异:

commentService(id: String!, comment: String!): Service!

因此,为实现给定突变的解析器的时间到了,我这样做:

async commentService(parent, {id, comment}, ctx: Context, info) {
    const userId = getUserId(ctx);
    const service = await ctx.db.query.service({
        where: {id}
    });
    if (!service) {
        throw new Error(`Service not found or you're not the author`)
    }

    const userComment = await ctx.db.mutation.createComment({
        data: {
            message: comment,
            service: {
                connect: {id}
            },
            author: {
                connect: {id:userId}
            },
        }
    });

    return ctx.db.mutation.updateService({
        where: {id},
        data: {
            comments: {
               connect: {id: userComment.id}
            }
        }
    })
}

问题 :

查询操场时我唯一收到的是null,而不是我给出的评论.

感谢阅读,直到目前为止.

解决方法:

你可以分享你暴露突变解析器的代码吗?如果您忘记在突变解析程序对象中包含commentService解析程序,则可能会返回null.

除此之外,我在代码中再看到一个问题.由于您在服务和注释之间存在关联,因此您可以使用单个突变来创建注释并将其添加到服务中.您不需要编写两个单独的突变来实现这一目标.您的解析器可以更改为如下所示:

async commentService(parent, {id, comment}, ctx: Context, info) {
    const userId = getUserId(ctx);

    return ctx.db.mutation.updateService({
        where: {id},
        data: {
            comments: {
               create: {
                   message: comment,
                   author: {
                      connect: {id:userId}
                   }
               }
            }
        }
    })
}

请注意,在执行更新之前,我还删除了查询以检查服务是否存在.原因是,updateService绑定调用将抛出错误,如果它不存在,我们不需要显式检查.

上一篇:graphql(四)


下一篇:「积木库」GraphQL技术搭建的无代码开发平台