无法执行更新突变

时间:2019-06-03 19:36:58

标签: javascript reactjs graphql apollo prisma

更新帖子时,无法为要发送到后端的变量分配值。当我在解析器中console.log(args.data)时,我得到[Object: null prototype] {}。除了变量对象为null之外,我没有收到任何错误。

以下是前端编辑表单。默认值data.post来自带有匹配帖子ID的查询,为简化起见,我对其进行了编辑。 variables console.log显示所有内容都已正确分配,直到发送到后端为止。

    const [title, setTitle] = useState('')
    const formSubmit = useMutation(UPDATE_POST_MUTATION)
    const variables = { title }
    const onSubmitHandler = e => {
        e.preventDefault()
        try {
            formSubmit({
                variables: {
                    id: props.match.params.id,
                    data: { ...variables } // this shows all the appropriate input from the form
                }
            })
        } catch(error) {
            throw new Error(error)
        }
        props.history.push('/')
    }

            <form className='form' onSubmit={onSubmitHandler}>
                <fieldset>
                    <div className="form-group">
                        <label htmlFor="title">Title</label>
                        <input
                            type="text"
                            className="form-control"
                            id="title"
                            placeholder="Enter title"
                            defaultValue={data.post.title}
                            onChange={e => setTitle(e.target.value)}
                        />
                    </div>
                    <button type="submit" className="">
                        Save Changes
                    </button>
                </fieldset>
            </form>    

以下是从前端开始的更新突变GraphQL:

export const UPDATE_POST_MUTATION = gql`
  mutation UpdatePost($id: ID!, $title: string) {
    updatePost(
        id: $id,
        data: {
            title: $title
        }
    ){
      id
    }
  }
`

以下是我的schema.graphql:

type Mutation {
    updatePost(id: ID!, data: UpdatePostInput!): Post!
}

最后,以下是我的解析器。以下代码中的console.log显示为空:

async updatePost(parent, args, { prisma, request }, info){
        console.log("args.data", args.data) // this shows [Object: null prototype] {}

        const userId = getUserId(request)
        const postExists = await prisma.exists.Post({
            id: args.id,
            author: {
                id: userId
            }
        })

        if (!postExists) {
            throw new Error("Unable to update post")
        }

        const isPublished = await prisma.exists.Post({
            id: args.id,
            published: true
        })

        if(isPublished && args.data.published === false) {
            await prisma.mutation.deleteManyReviews({
                where: {
                    post: {
                        id: args.id
                    }
                }
            })
        }
        return prisma.mutation.updatePost({
            where: {
                id: args.id
            },
            data: args.data
        })
    },

0 个答案:

没有答案