使用Amplify和GraphQL开发React应用时创建Note报错求助
使用Amplify+GraphQL创建Note时出错
我的GraphQL Schema
type Note @model @auth(rules: [ { allow: public } ] ){ id: ID! name: String! description: String image: String noteBook: NoteBook! } type NoteBook @model @auth(rules: [ { allow: public } ] ){ id: ID! name: String! notes: [Note!] }
相关函数代码
创建Notebook函数
async function handleCreateNoteBook(){ const data = { name: 'my 1st notebook' } await API.graphql({ query: createNoteBook, variables: {input: data} }) }
创建Note函数
async function handleCreateNote(){ const data = { name: 'test', description: 'this is a test note', noteBook: 'my 2nd notebook' } await API.graphql({ query: createNoteMutation, variables: {input: data} }) }
显示Notes函数
async function handleShow(){ const noteBookData = await API.graphql({query: listNoteBooks}) const notesData = await API.graphql({query: listNotes}) console.log(noteBookData) }
遇到的错误
[object Object] at handleError (http://localhost:3000/static/js/bundle.js:80145:58) at http://localhost:3000/static/js/bundle.js:80168:7
问题原因及解决办法
核心问题
创建Note时的noteBook字段传值逻辑错误:
- Schema中
Note的noteBook: NoteBook!是关联类型,Amplify会自动为Note生成**noteBookId**字段作为外键,用来关联NoteBook的id,而非直接接收字符串名称或对象。 - 你当前传入的
noteBook: 'my 2nd notebook'是字符串,既不符合NoteBook类型要求,也不是Amplify关联所需的外键值。
解决步骤
- 先通过
handleShow函数获取已创建NoteBook的id:运行函数后查看控制台打印的noteBookData,找到目标Notebook的id值。 - 修改创建Note的代码,将
noteBook字段替换为noteBookId,并传入正确的Notebook id:
async function handleCreateNote(){ // 确保已创建对应Notebook并拿到它的id const data = { name: 'test', description: 'this is a test note', noteBookId: '替换为目标Notebook的id' } await API.graphql({ query: createNoteMutation, variables: {input: data} }) }
- 确认
createNoteMutation是Amplify自动生成的正确mutation,它的入参应包含noteBookId字段。
内容的提问来源于stack exchange,提问作者FloydK
相关产品推荐
相关产品推荐

