2017-02-23 3 views
-1

Доброго дня им новичок здесь и им решение graphql и им, имеющие некоторые проблемы с мутацией может кто-нибудь объяснить этот блок кода для меня спасибоможет кто-нибудь объяснить этот код мне

RootMutation: { 
createAuthor: (root, args) => { return Author.create(args); }, 
createPost: (root, { authorId, tags, title, text }) => { 
    return Author.findOne({ where: { id: authorId } }).then((author) => { 
    console.log('found', author); 
    return author.createPost({ tags: tags.join(','), title, text }); 
    }); 
}, 
}, 

ответ

1

Конечно, это пример двух мутаций на сервере GraphQL. Мы можем сломать его, чтобы понять, что происходит.

Сначала давайте посмотрим на систему типов. Схема GraphQL обычно имеет два корневых поля query и mutation (а иногда и subscription). Эти корневые поля являются корнем вашей иерархии данных и выставляют запросы (запросы GET) и мутации (запросы POST, PUT, DELETE и т. Д.), К которым у вас есть доступ.

Взглядами него вы реализуете схему с типом мутации корня, который выглядит следующим образом:

type Mutation { 
    createAuthor: Author 
    createPost: Post 
} 

Тип в GraphQL состоит из набора полей, каждая из которых может иметь связанный с ним распознаватель. Резольверы в GraphQL подобны обработчикам событий, которые вы присоединяете к конечным точкам в REST.

код, который вы выше определения двух резольверами, которые будут обрабатывать логику, связанную с createAuthor и createPost мутаций. И.Е. код в createPost распознавателя является то, что будет работать, когда я выполняю запрос, как это:

mutation CreatePost($post: CreatePostInput!) { 
    createPost(input: $post) { 
    id 
    title 
    tags 
    text 
    } 
} 

Среда GraphQL анализирует запрос и направляет операции на правильный распознаватель в зависимости от содержания запроса. В этом примере, было бы видеть, что я называю createPost мутацию и удостоверился бы назвать createPost распознаватель в вашем случае выглядит следующим образом:

createPost: (root, { authorId, tags, title, text }) => { 
    return Author.findOne({ where: { id: authorId } }).then((author) => { 
    console.log('found', author); 
    return author.createPost({ tags: tags.join(','), title, text }); 
    }); 
}, 

Чтобы понять, как работает распознаватель, давайте посмотрим на GraphQLFieldResovler определение типа от graphql-JS

export type GraphQLFieldResolver<TSource, TContext> = (
    source: TSource, 
    args: { [argName: string]: any }, 
    context: TContext, 
    info: GraphQLResolveInfo 
) => mixed; 

Как вы можете видеть GraphQLFieldResolver это функция, которая принимает 4 аргумента.

  1. источник: источник родительский объект текущего поля. Например, если вы определяли преобразователь для поля fullName типа User, источником был бы полный пользовательский объект.
  2. args: Аргументы - любые входные аргументы для этого резольвера. В моем запросе выше он будет содержать значение переменной $post.
  3. context: Контекст - это глобальный контекст для выполнения GraphQL. Это полезно для передачи информации, которая может потребоваться для решения. Например, вы включаете соединение с базой данных, которое вы можете использовать из своих преобразователей, не импортируя его в каждый файл.
  4. info: Информационный объект содержит информацию о вашей схеме GraphQL, запросе и другой информации, такой как путь к текущему исполнителю. Это полезно во многих отношениях.Вот один пост говорить о том, как вы можете использовать его для предвычисления запросов: (https://scaphold.io/community/blog/querying-relational-data-with-graphql/)

Эта идея иметь типы и полевые арбитры является частью того, что делает GraphQL настолько мощным. После того, как вы определили систему типов и разрешители для своих полей, вы можете структурировать свою схему, но вы хотите, и GraphQL всегда обязательно вызовет правильный распознаватель независимо от того, насколько глубоко вложен запрос.

Я надеюсь, что это помогает :)

+0

спасибо за это, даже им до сих пор путает это мне помогло: D –

+0

@mparis Великого объяснения, но когда вы объясните мне и ответить на вопросы о минных –

Смежные вопросы