Использование свойства GraphQL Args в мутации - PullRequest
0 голосов
/ 22 октября 2018

Я делаю службу блогов, используя express и apollo-express вместе с mongodb (mongoose).

Я сделал несколько запросов на мутацию, но не смог получить аргументы запроса на мутацию.

Теперь я спрашиваю, как мне следует структурировать мой запрос на мутацию, чтобы заставить это работать.спасибо.

ошибка:

"message": "Проверка блога не удалась: title: Path title требуется., slug: Path 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
}

часть моегоresolvers:

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
}

часть моей схемы базы данных (mongoose):

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 голосов
/ 22 октября 2018

Вы определили свою мутацию 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 неопределенного.

...