GraphQL学习笔记(后端增删改篇)

1,232 阅读1分钟

今日份的学习——GraphQL

上节我们成功搭建了graphql的架子并实现了查询功能,这节我们来实现增删改功能。

你一定想问,怎么加数据啊?能不能搞快点,还没到用户界面呢?别急别急,一步一步来。

人被逼急了什么都做的出来,除了数学题(高清版)

不知道你有没有注意到,在上节导出graphql的schema使用的是

module.exports = new GraphQLSchema({
  query: RootQuery
});

既然查询是query,那增删改是不是就应该对应别的?

我可真skr小机灵鬼儿

没错,如果需要修改数据,就需要用到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规定了类型为必填,否则就会报错。

WX20190830-174800@2x

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

WX20190830-174953@2x

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

WX20190830-175113@2x

还挺牛(熊猫头)

新增书本类似,就不再重复讲解。

我们再实现一下删除语句

 deleteBook: {
      type: BookType,
      args: {
        id: { type: new GraphQLNonNull(GraphQLID) }
      },
      resolve(parent, args) {
        return Book.deleteOne({ _id: args.id });
      }
    }

现在就很明了了,语句的type是书类型,入参是书的id,返回了一个promise内容是根据id删除一本书。

那先来看看现在有哪些书

WX20190830-175558@2x

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

WX20190830-175738@2x

跟着我的操作,是不是很简单?

然后再查一下,看看是不是和预期的一样。

WX20190830-180203@2x

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

学业繁忙,告辞