在 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

graphql:使用 GraphQLObjectType 创建扩展 Mutation 的类型

GraphQL Mutation 更新数据库中的字段数组

如何在连接到 mLab 的 GraphQL 中为“更新”数据编写 Mutation

如何使用 Mongoose Schema 修复 GraphQL Mutation 中的构造函数错误 [重复]

紧跟在查询类型(query/mutation)GraphQL之后的字符串的意义