如何使用 Fastify 和 Sequelize ORM 重构 REST API

阅读时长 14 分钟读完

在现代化的 Web 开发中,REST API 已经成为了开发者们的标准实践。在 Node.js 生态系统中,有数不尽的轻量级 Web 框架可供选择,其中 Fastify 就是一个快速、低开销而且安全的框架。而 Sequelize ORM 则提供易于使用的数据访问层,可以帮助我们轻松地映射关系型数据库。在本文中,我们将探讨如何使用 Fastify 和 Sequelize ORM 来重构 REST API,并给出示例代码。

快速入门

前置条件

在开始本文之前,您需要先安装以下工具:

  • Node.js (版本 >= 12.0.0)
  • MySQL 数据库 (或其它支持 Sequelize 的关系型数据库)

安装 Fastify 和 Sequelize

我们可以使用 npm 来安装最新版本的 Fastify 和 Sequelize。在您的项目根目录中运行以下命令:

创建一个 Fastify 应用

在您的项目中引入 Fastify 并创建一个实例:

配置 Sequelize

在使用 Sequelize 之前,我们需要先连接到数据库并设置一些基本的配置:

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

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

在上面的代码中,我们创建了一个 SQLite 数据库实例,并禁用了 Sequelize 自带的时间戳功能。

创建模型

现在,我们可以创建一个模型,并定义其属性和关系。例如,我们可以创建一个名为 User 的模型:

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

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

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

上述模型定义了一个 User 对象,包含了 firstNamelastNameemailpassword 等四个属性。

创建路由

现在,我们可以创建一个路由,并绑定到 Fastify 应用上:

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

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

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

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

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

上述代码定义了一些路由,包括获取所有用户列表、创建用户、获取单个用户、更新用户和删除用户。

启动应用

最后,我们需要启动 Fastify 应用:

深入剖析

配置 Sequelize

在前面的快速入门中,我们讲解了如何创建一个 Sequelize 实例,并连接到 SQLite 数据库。但是,在实际使用中,我们需要配置一些更加详细的选项。

定义模型

在 Sequelize 中,模型是代表数据库表的类。在创建模型时,我们需要定义其属性和关系。例如,下面的代码定义了一个 Task 模型:

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

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

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

在上面的代码中,我们创建了一个名为 Task 的模型,包含了 titledescription 两个属性。在创建属性时,我们可以根据具体的需要设置其类型、是否允许为 null、是否唯一,以及其它的一些属性。

在定义完模型之后,我们可以使用 Sequelize 自带的 Model 和 DataTypes 进行操作。

定义关联

除了定义属性,我们还可以在模型间定义关联。比如,我们可以定义一个 Task 模型,它关联了一个 User 模型:

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

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

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

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

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

在上面的代码中,我们创建了两个模型,UserTask。并在 Task 模型中定义了一个 belongsTo 关联,表示一个 Task 属于一个 User,同时在 User 模型中定义了一个 hasMany 关联,表示一个 User 拥有多个 Task。

定义数据验证

Sequelize 提供了丰富的数据验证功能,可以帮助我们在插入或更新数据时进行合法性验证。例如,我们可以在 User 模型中定义一些验证规则:

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

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

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

在上面的代码中,我们使用了一些常见的数据验证规则,包括 notEmptynotNulllenisEmail 等。您可以根据具体的需求自定义数据验证规则。

创建路由

在前面的快速入门中,我们展示了创建路由的示例。在实际应用中,我们需要根据具体业务场景进行路由定义。

参数获取

Fastify 提供了多种方式来获取传入的请求参数,包括查询参数、请求体、路径参数等。

获取路径参数,可以使用 req.params

获取查询参数,可以使用 req.query

获取请求体,可以使用 req.body

错误处理

在 REST API 中,异常情况下需要返回有意义的错误信息。在 Fastify 中,我们可以使用 fastify-error 插件来处理错误。例如:

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

在上面的代码中,我们使用了 try/catch 来捕获异常,在出现异常时抛出错误信息,而不是让客户端收到 HTTP 500 错误。

启动应用

Fastify 支持多种启动方式,包括 HTTP、HTTPS、Unix 套接字、HTTP2 和多端口监听等。在启动应用时,我们可以指定监听的主机和端口。例如:

在上面的代码中,我们将应用运行在 0.0.0.0:3000 地址上。

完整示例

在本文中,我们讲解了如何使用 Fastify 和 Sequelize ORM 来构建 REST API,下面是一份完整的示例代码:

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

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

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

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

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

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

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

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

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

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

总结

在本文中,我们探讨了如何使用 Fastify 和 Sequelize ORM 来构建 REST API。Fastify 是一个快速、低开销而且安全的框架,而 Sequelize 提供了易于使用的数据访问层。在实际应用中,我们需要根据具体业务场景来定义数据模型和路由,并灵活地使用 Fastify 和 Sequelize 提供的功能,以实现高效的 Web 开发。

本文涉及的完整示例代码可以在 https://github.com/wxyyxc1992/Backend-Series-With-NodeJS 进行查看,并提工程的方式进行运行测试。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648f822448841e9894dbcac6

纠错
反馈