前言
GraphQL和Sequelize是当前前端开发中最常用的两个技术之一。GraphQL是一种API查询语言,它可以使客户端摆脱从服务器获取所需数据的繁琐过程。Sequelize是一种Node.js的ORM,可以通过Javascript访问数据库。graphql-sequelize-crud-pasta是一个Node.js NPM包,可以帮助我们在GraphQL和Sequelize之间建立简单的CRUD(增删改查)操作。
在这篇文章中,我们将介绍如何使用graphql-sequelize-crud-pasta,并且会提供具体的代码示例。
什么是graphql-sequelize-crud-pasta
graphql-sequelize-crud-pasta是一个用于快速创建GraphQL API的CRUD操作的NPM包。它是一个适用于Sequelize ORM的封装,可以帮助我们快速生成数据库模型、GraphQL模式和查询。使用这个包,可以省去以下的繁琐操作:
- 手动编写Sequelize模型和GraphQL模式
- 手动编写GraphQL查询和修改操作
- 手动编写数据验证和安全性检查
我们只需要提供Sequelize模型,graphql-sequelize-crud-pasta会自动为我们生成GraphQL模式和查询操作。这使我们可以更专注于业务逻辑的实现,而不需要过于关注底层操作。
安装和使用graphql-sequelize-crud-pasta
使用npm即可安装:
npm install graphql-sequelize-crud-pasta
安装好后,我们需要先引入它:
const graphqlSequelizeCrudPasta = require('graphql-sequelize-crud-pasta');
生成GraphQL模式
下面我们来介绍如何创建GraphQL模式。先定义一个Sequelize模型:
-- -------------------- ---- ------- ----- - ---------- --------- - - --------------------- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ---- -- ----- ----------------- ---- ----------------- --- -------------- - -----
然后在GraphQL中定义模式:
-- -------------------- ---- ------- ----- - -------------------- - - ------------------------- ----- --- - ------------------- ----- ---- - ------------------------ ----- -------- - - ---- ----- - ------ ------ - ---- ---- - --- --- ----- ------ ---- --- - -- ----- --------- - - ------ - ------ ----- -- -- - ----- ----- - ----- --------------- ------ ------ - - -- ----- ------ - ---------------------- --------- --------- ---
这是我们自己编写GraphQL模式和Resolvers的方式,但这样做也非常繁琐。下面我们将介绍如何使用graphql-sequelize-crud-pasta来自动创建GraphQL模式和Resolvers。
首先我们需要定义一个工厂函数:
-- -------------------- ---- ------- ----- ------- - ----------------------------------- --------- - ---- ---- - --- --- ----- ------ ---- --- - -- ------ ----- ------- ----- ------------- ----- -------- ----- -- - ------------------- ------- ------ ------------ -- ------ ----- ---------- ----- -------- ----- -- - ------------------ ------- ------ --------- -- ---------------------- ----- ----------------- ---- ---
其中参数意义如下:
- typeDefs:GraphQL schema,可以包含Query、Mutation、Type等定义。
- model:使用Sequelize定义的表。
- before:在执行查询/变更之前执行的回调函数。
- after:在执行查询/变更之后执行的回调函数。
- enableNestedMutations:是否启用嵌套变更。默认为true。
- enableTotalCount:是否启用总行数统计(仅对查询有效)。默认为true。
现在,我们可以直接使用factory函数来生成GraphQL模式:
const schema = factory.createSchema();
然后,我们就可以像之前一样在GraphQL中使用模式和Resolvers了。
使用GraphQL模式和查询操作
下面我们来介绍如何使用graphql-sequelize-crud-pasta的查询操作:
{ users { id name age } }
这个查询操作会返回所有用户的id、name、age数据,如下所示:
-- -------------------- ---- ------- - ------- - -------- - - ----- ---- ------- -------- ------ -- -- - ----- ---- ------- ------ ------ -- - --- - - -
接下来,我们将介绍如何从GraphQL中创建CRUD操作。
创建
-- -------------------- ---- ------- -------- - ----------------- - ----- -------- ---- -- -- - ---- - -- ---- --- - - -
这个Mutation会创建一个年龄为19岁的Harry用户,并返回他的id、name、age信息。
读取
{ user(id: 1) { id name age } }
这个查询操作会返回包含id为1的用户的id、name、age信息,例如:
-- -------------------- ---- ------- - ------- - ------- - ----- ---- ------- -------- ------ -- - - -
更新
-- -------------------- ---- ------- -------- - ----------------- - --- - ----- ----- ---- -- -- - ---- - -- ---- --- - - -
这个Mutation将用户的id为1,名字为Alice,年龄为18的用户数据更新为id为1,名字为Eve,年龄为21的用户数据,并返回新的id、name、age信息。
删除
-- -------------------- ---- ------- -------- - -------------- -- - ---- - -- ---- --- - - -
这个Mutation会删除id为1的用户,并在成功后返回其id、name、age信息。
验证和安全性检查
graphql-sequelize-crud-pasta也支持自动执行验证和安全性检查。我们可以在工厂函数中添加参数:
-- -------------------- ---- ------- ----- ------- - ----------------------------------- --------- - ---- ---- - --- --- ----- ------ ---- --- - -- ------ ----- --------- ----- ------ -------- ----- ----- -- - --------------------- ------- ------ ----- -- ------- ----- ------ -------- ----- ----- -- - ------------------- ------- ------ ----- - ---
其中,validate钩子可以用来验证数据。如果钩子抛出异常,则结果将自动返回错误信息。例如:
-- -------------------- ---- ------- ----- ------- - ----------------------------------- --------- - ---- ---- - --- --- ----- ------ ---- --- - -- ------ ----- --------- ----- ------ -------- ----- ----- -- - -- --------------- - --- - ----- --- ---------- ---- -- ------- ---- -- ----- -- ------ - ------ ----- - ---
secure钩子用来验证当前用户是否有执行查询/变更操作的权限。当钩子返回false时,将自动返回403禁止访问的错误信息:
-- -------------------- ---- ------- ----- ------- - ----------------------------------- --------- - ---- ---- - --- --- ----- ------ ---- --- - -- ------ ----- ------- ----- ------ -------- ----- ----- -- - -- ----------------------- - ----- --- ---------- --- --- ------- -- ------ ---- -------- - ------ ----- - ---
总结
在这篇文章中,我们向您介绍了如何使用graphql-sequelize-crud-pasta来自动生成GraphQL模式和Resolvers,以及如何使用它来创建CRUD操作。我们还介绍了如何执行数据验证和安全性检查。感谢您的阅读,希望本文对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600554ce81e8991b448d2002