部分更新突变(GraphQL)

时间:2020-02-14 13:54:49

标签: graphql prisma prisma-graphql graphql-mutation

如何仅通过一个字段更改就可以更新节点,而剩下的其他字段则不予处理?

我的用户类型

type User {
        id: ID!
        user_id: String!
        username: String!
        email: String!
        role: Role!
        isVerified: Boolean!
    }

我的输入类型

input UserUpdateInput {
    user_id: String
    username: String
    email: String
    password: String
    role: Role
    isVerified: Boolean
    }
input UserWhereUniqueInput {
    id: ID
    user_id: String
    email: String
    }

我的变异类型

type Mutation {
        updateUser(data: UserUpdateInput!, where: UserWhereUniqueInput): User
    }

我的解析器

function updateUser(root, args, context, info){
    return context.db.mutation.updateUser({
      data: args.data,
      where: {
      id: args.where.id     
      }
    }, info)
  }

这是在GraphQL游乐场发送的请求

mutation{
    updateUser(
    data: {
      isVerified: true
    }
    where:{
    user_id :  "afc485b"
        }
    )
  {
    isVerified
  }
}

这是错误消息

{
  "errors": [
    {
      "message": "Cannot read property 'mutation' of undefined",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "updateUser"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "stacktrace": [
            "TypeError: Cannot read property 'mutation' of undefined"

有人帮助我。我想念什么? 按照丹尼尔·雷登(Daniel Rearden)在答案部分的建议更新服务器后,出现新错误

    {
      "message": "Cannot read property 'updateUser' of undefined",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "updateUser"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "stacktrace": [
            "TypeError: Cannot read property 'updateUser' of undefined"

2 个答案:

答案 0 :(得分:0)

该错误是由于未正确将db属性添加到您的上下文而导致的。假设您仍在使用版本1,则您的代码应如下所示:

const { prisma } = require('./generated/prisma-client')

const server = new ApolloServer({
  ...
  context: {
    db: prisma,
  },
})

答案 1 :(得分:0)

我注意到的第一件事是您的 GQL 查询不正确。

你的:

mutation{
    updateUser(
    data: {
      isVerified: true
    }
    where:{
    user_id :  "afc485b"
        }
    )
  {
    isVerified
  }
}
  1. 在“mutation”这个词之后,你为调用设置一个名称,即 “UpdateUser”但实际上可以是任何东西。对于每个部分

  2. where 子句您需要使检查值成为一个对象,即 where: { myProperty: {eq: "some value"}}

所以你的查询应该更像这样:

mutation UpdateUser {
    updateUser(
      data: {isVerified: true}
      where:{user_id : {eq: "afc485b"}}
    )
  {
    isVerified
  }
}

希望有所帮助...我没有完全阅读其余部分,但认为这将有助于解决您遇到的初始错误。