今日份的学习——GraphQL
上节我们成功搭建了graphql的架子并实现了查询功能,这节我们来实现增删改功能。
你一定想问,怎么加数据啊?能不能搞快点,还没到用户界面呢?别急别急,一步一步来。

不知道你有没有注意到,在上节导出graphql的schema使用的是
module.exports = new GraphQLSchema({
query: RootQuery
});
既然查询是query,那增删改是不是就应该对应别的?

没错,如果需要修改数据,就需要用到mutation
module.exports = new GraphQLSchema({
query: RootQuery,
mutation: Mutation
});
现在我们来定义一下mutation
同样是使用GraphQLObjectType来新建一个对象,
const Mutation = new GraphQLObjectType({
name: 'Mutation',
fields: {
addAuthor: {
type: AuthorType,//见上节
args: {
name: { type: new GraphQLNonNull(GraphQLString) },
age: { type: new GraphQLNonNull(GraphQLInt) }
},
resolve(parent, args) {
let author = new Author({
name: args.name,
age: args.age
});
return author.save();
}
}
}
});
同样,定义了一个叫addAuthor的查询语句,它的类型是AuthorType,这里的args指的是修改语句接收的方法参数,GraphQLNonNull规定了类型为必填,否则就会报错。

那么我们现在正常新增一个author试试

再去数据库看看,有没有真的新增到


新增书本类似,就不再重复讲解。
我们再实现一下删除语句
deleteBook: {
type: BookType,
args: {
id: { type: new GraphQLNonNull(GraphQLID) }
},
resolve(parent, args) {
return Book.deleteOne({ _id: args.id });
}
}
现在就很明了了,语句的type是书类型,入参是书的id,返回了一个promise内容是根据id删除一本书。
那先来看看现在有哪些书

然后我们把React给删了(舍不得)

跟着我的操作,是不是很简单?
然后再查一下,看看是不是和预期的一样。

完整代码在github,下节分享对应的graphql客户端。
