我在 AWS 中遇到了 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
}
找到已部署的功能(控制台日志中包含错误)
任何可以提供的帮助将不胜感激。
错误消息指的是突变的输入,其类型应该是
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 描述,我不太确定。为由单个变量组成的输入定义输入类型似乎完全是多余的。