部分更新突变(GraphQL)

Posted

技术标签:

【中文标题】部分更新突变(GraphQL)【英文标题】:Partial Update Mutations(GraphQL) 【发布时间】:2020-05-30 08:02:29 【问题描述】:

我怎样才能更新一个只有一个字段更改的节点,而保留其余字段?

我的用户类型

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"

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

我已经按照您的建议更新了我的服务器后出现新错误的问题 不应该只是context.db.updateUser,如docs所示吗?你从哪里得到mutation【参考方案2】:

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

你的:

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

    在“突变”一词之后,您为调用设置了一个名称,即 “UpdateUser”,但实际上可以是任何东西。对于每个部分

    您需要将检查值设为对象的where子句,即 where: myProperty: eq: "some value"

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

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

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

【讨论】:

以上是关于部分更新突变(GraphQL)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GraphQL 突变进行更新(热巧克力)

使用 Appsync 更新 GraphQL 中的突变

FaunaDB - 如何批量更新单个 graphQL 突变中的条目列表?

GraphQL 突变在更新时返回 null

如何进行更新突变 - GraphQL(加上 mongoDB)

无法使用 graphql 突变更新流星用户集合