在 Mutation 中使用 GraphQL Args 属性
Posted
技术标签:
【中文标题】在 Mutation 中使用 GraphQL Args 属性【英文标题】:Using The GraphQL Args Property In A Mutation 【发布时间】:2019-03-26 09:09:03 【问题描述】:我正在使用 express 和 apollo-express 以及 mongodb (mongoose) 制作博客服务。
我做了一些突变查询,但没有成功获得突变查询的参数。
现在我正在询问我应该如何构建我的变异查询以使事情正常工作。谢谢。
错误:
"message": "博客验证失败:标题:路径
title
是必需的。slug:路径slug
是必需的。"
查询:
mutation ($input: BlogInput)
newBlog(input: $input)
title
slug
查询变量:
"input":
"title": "ABC",
"slug": "abc"
我的 graphql 架构的一部分:
type Blog
id: ID!
title: String!
slug: String!
description: String
users: [User]!
posts: [Post]!
input BlogInput
title: String!
slug: String!
description: String
extend type Mutation
newBlog(input: BlogInput): Blog
我的部分解析器:
import Blog from './blog.model'
export const blogs = async () =>
const data = await Blog.find().exec()
return data
export const newBlog = async (_, args) =>
const data = await Blog.create( title: args.title, slug: args.slug )
return data
我的数据库架构的一部分(猫鼬):
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const blogSchema = Schema(
title:
type: String,
required: true
,
slug:
type: String,
required: true,
unique: true
,
description:
type: String
,
users:
type: [Schema.Types.ObjectId],
ref: 'User'
,
posts:
type: [Schema.Types.ObjectId],
ref: 'Post'
)
export default mongoose.model('Blog', blogSchema)
【问题讨论】:
“没有成功获取突变查询的参数”是什么意思有点不清楚。解析器中的参数是否返回未定义?请更新您的问题以包含您看到的任何错误或意外行为。 我已经更新了问题 【参考方案1】:您已将 newBlog
突变定义为接受名为 input
的单个参数。据我所知,您正在使用变量正确地将该参数传递给突变。您的解析器接收传递给正在解析的字段的参数映射。这意味着您可以像这样访问input
对象的各个属性:
export const newBlog = async (_, args) =>
const data = await Blog.create( title: args.input.title, slug: args.input.slug )
return data
注意,您可能希望使input
不可为空(即将类型设置为BlogInput!
),否则您的解析器将需要处理args.input
返回未定义的可能性。
【讨论】:
对不起,我很愚蠢。我的错误实际上是我将查询变量粘贴到 HTTP 标头中。太他妈傻了。以上是关于在 Mutation 中使用 GraphQL Args 属性的主要内容,如果未能解决你的问题,请参考以下文章
graphql:使用 GraphQLObjectType 创建扩展 Mutation 的类型
如何在连接到 mLab 的 GraphQL 中为“更新”数据编写 Mutation