npm包graphql-sequelize-crud-pasta使用教程

阅读时长 9 分钟读完

前言

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即可安装:

安装好后,我们需要先引入它:

生成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模式:

然后,我们就可以像之前一样在GraphQL中使用模式和Resolvers了。

使用GraphQL模式和查询操作

下面我们来介绍如何使用graphql-sequelize-crud-pasta的查询操作:

这个查询操作会返回所有用户的id、name、age数据,如下所示:

-- -------------------- ---- -------
-
  ------- -
    -------- -
      -
        ----- ----
        ------- --------
        ------ --
      --
      -
        ----- ----
        ------- ------
        ------ --
      -
      ---
    -
  -
-

接下来,我们将介绍如何从GraphQL中创建CRUD操作。

创建

-- -------------------- ---- -------
-------- -
  ----------------- -
    ----- --------
    ---- --
  -- -
    ---- -
      --
      ----
      ---
    -
  -
-

这个Mutation会创建一个年龄为19岁的Harry用户,并返回他的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

纠错
反馈