“变量输入包含未为输入对象类型“DeleteNoteInput”定义的字段”

问题描述 投票:0回答:1

我在 AWS 中遇到了 graphQL 问题。该错误消息表明我输入的输入类型值无效。这让我很困惑,因为我正在从列表中获取该项目。该列表是由“获取列表”查询生成的,它确实来自我试图从中删除项目的数据集。据我所知,我尝试删除的对象没有添加任何内容。

我已查看以下一些内容以尝试解决此问题:

  1. 我已经检查并确认我要删除的对象的形状与为 graphQl 定义原始数据项时定义的形状完全相同,并且与我提供的删除注释突变相同代码。
  2. 我已经在 stackoverflow 上查看了 this 文章,它似乎也有类似的问题。
  3. 我已经审查了几个不同的 graphql 来源,我在谷歌上搜索过,但没能找到任何东西。

单击按钮后,将在 React 类中调用代码。该代码体可以在下面找到。除了调用执行删除的函数之外,它还会在调用删除后从状态中删除项目。这一点做得令人满意。

    deleteNote = (deletedNote) => {
  console.log('deletedNote variable in deleteNote function in app.js', deletedNote)
  removeNote(deletedNote)
  this.setState(prevState => {
    const indexOfNote = prevState.notes.findIndex(
      note => note.id === deletedNote.id 
    );
    let newNotesList = [...prevState.notes];
    if(indexOfNote >= 0) newNotesList.splice(indexOfNote, 1)
    return {notes: newNotesList} 
  })
}

该函数调用另一个函数

removeNote
,该函数被导入到反应文件中。该函数的代码如下:

async function removeNote(note){
console.log(note)

await client.graphql({
    query: deleteNoteMutation,
    variables: {input: {id}}
}).then(response => {
    console.log('Success! ', response)
}).catch(error => {
    console.log('Failure Response: ', error)
})}

现在,在第一个函数运行并调用第二个函数之后,值将被传递到状态,或者抛出错误。抛出的错误是:

"The variables input contains a field that is not defined for input object type 'DeleteNoteInput' "

我获得的突变是:

    export const deleteNote = /* GraphQL */ `
  mutation DeleteNote(
    $input: DeleteNoteInput!
    $condition: ModelNoteConditionInput
  ) {
    deleteNote(input: $input, condition: $condition) {
      id
      name
      description
      createdAt
      updatedAt
      __typename
    }
  }
`;

“schema.graphql”文件中定义的对象是:

    type Note @model @auth(rules: [ { allow: public } ] ){
  id: ID!
  name: String!
  description: String
}

完整的代码可以在here找到 可以在here

找到已部署的功能(控制台日志中包含错误)

任何可以提供的帮助将不胜感激。

amazon-web-services react-native graphql
1个回答
0
投票

错误消息指的是突变的输入,其类型应该是

DeleteNoteInput!

此变量将传递给您的突变:

variables: {input: {id}}

在您的模式中,

DeleteNoteInput
输入类型定义为:

"kind" : "INPUT_OBJECT",
        "name" : "DeleteNoteInput",
        "description" : null,
        "fields" : null,
        "inputFields" : [ {
          "name" : "id",
          "description" : null,
          "type" : {
            "kind" : "NON_NULL",
            "name" : null,
            "ofType" : {
              "kind" : "SCALAR",
              "name" : "ID",
              "ofType" : null
            }
          },
          "defaultValue" : null
        } ],
        "interfaces" : null,
        "enumValues" : null,
        "possibleTypes" : null

通过这个定义(名称是“id”或“ID”),传递给突变的变量实际上应该是:

variables: {input: {ID: id}}

鉴于此输入对象的详细(可能是机器生成的?)JSON 描述,我不太确定。为由单个变量组成的输入定义输入类型似乎完全是多余的。

© www.soinside.com 2019 - 2024. All rights reserved.