美好的一天,我新手在这里,我正在处理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 });
});
},
},
答案 0 :(得分:1)
当然,这是GraphQL服务器中两个突变的示例。我们可以将其分解以了解正在发生的事情。
首先让我们看一下类型系统。 GraphQL架构通常有两个根域query
和mutation
(有时候subscription
)。这些根字段是数据层次结构的根,并公开您有权访问的查询(GET请求)和突变(POST,PUT,DELETE等请求)。
从外观上看,您正在实现一个具有如下所示的根突变类型的模式:
type Mutation {
createAuthor: Author
createPost: Post
}
GraphQL中的一个类型由一组字段组成,每个字段都可以有一个关联的解析器。 GraphQL中的解析器就像您将附加到REST中的端点的事件处理程序。
上面的代码定义了两个解析器,它们将处理与createAuthor
和createPost
突变相关的逻辑。 I.E. 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 });
});
},
要了解解析器的工作原理,让我们从 graphql-js
中查看 GraphQLFieldResovler 类型定义export type GraphQLFieldResolver<TSource, TContext> = (
source: TSource,
args: { [argName: string]: any },
context: TContext,
info: GraphQLResolveInfo
) => mixed;
正如您所看到的,GraphQLFieldResolver是一个带有4个参数的函数。
fullName
类型的字段User
定义解析程序,则源将是完整的用户对象。$post
变量的值。这种拥有类型和字段解析器的想法是使GraphQL如此强大的一部分。一旦你定义了你的字段的类型系统和解析器,你可以根据需要构建你的架构,无论查询嵌套的程度如何,GraphQL总是会确保调用正确的解析器。
我希望这会有所帮助:)