在变异中使用GraphQL Args属性

时间:2018-10-22 10:09:33

标签: javascript node.js express graphql apollo-server

我正在使用express和apollo-express以及mongodb(猫鼬)来提供博客服务。

我进行了一些突变查询,但是获得突变查询的参数并没有成功。

现在,我要问如何构造我的变异查询,以使事情正常。谢谢。

错误:

  

“消息”:“博客验证失败:标题:路径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 个答案:

答案 0 :(得分:0)

您已经定义了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返回不确定的可能性。 / p>