Sequelize 与 Express 框架结合使用的技巧

阅读时长 14 分钟读完

前言:本文主要介绍如何在 Express 框架中使用 Sequelize ORM,以及一些 Sequelize 使用技巧,旨在帮助前端开发者更好地理解和使用 Sequelize ORM。

什么是 Sequelize?

Sequelize 是一个基于 Node.js 的 ORM(Object Relational Mapping)库,用于调用关系型数据库的 API。Sequelize 可以使用 ES6 的 Promise 和 async/await 语法使得代码易于理解和维护。同时,Sequelize 还提供了强大的 SQL 查询功能,这意味着你可以使用纯 SQL 或 Sequelize 查询语言来查询数据。

Sequelize 支持连接 MySQL、PostgreSQL、SQLite 和 Microsoft SQL Server 等多种数据库。在此基础上,Sequelize 同时支持主从和读写分离、事务等高级特性,旨在为开发者提供更多选择,方便他们根据业务需求使用不同的数据库。

sequelize-cli

Sequelize 提供了官方的 sequelize-cli 命令行工具,通过使用 sequelize-cli 工具,我们可以快速方便地创建 Sequelize 项目的文件结构,包括 models、migrations、seeders 等。

首先,我们需要全局安装 sequelize-cli:

接下来,在项目根目录下输入以下命令:

通过上述命令,Sequelize 会自动为我们在项目的根目录下创建一个名为 sequelize 的文件夹,其中包括了一些默认的文件和文件夹,包括:

  • config:存放配置文件
  • migrations:存放迁移脚本
  • models:存放模型定义文件
  • seeders:存放种子数据文件

创建 Sequelize 模型

Sequelize 模型用于定义和管理数据库中的表和对应的数据结构,我们可以使用 Sequelize 模型将表的定义转化为 JavaScript 对象,并对其进行添加、查询、更新和删除等操作。

以下是一个简单的 Sequelize 模型例子:

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

上面代码中,我们首先导入 sequelize 和 DataTypes 两个对象,然后通过 sequelize.define() 方法定义了一个 User 模型。

其中,sequelize.define() 的第一个参数为模型的名称,第二个参数为包含表的各个字段的对象。再具体解释一下包含的字段:

  • name: 姓名,类型为字符串,并不能为空
  • age: 年龄,类型为整数
  • email: 邮箱,类型为字符串,并不能为空,必须唯一
  • isActive: 是否激活,类型为布尔值,初始值为 false。

定义完模型后,我们需要通过 sync()方法将模型同步到数据库中:

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

上述代码中,我们通过 require() 方法引入了 User 模型,然后创建了 Sequelize 实例,并配置数据库连接信息。最后通过 async/await 语法调用 sequelize.sync() 方法将模型同步到数据库中,并在命令行中打印创建数据表成功的提示信息。

在 Express 中使用 Sequelize

在 Express 中使用 Sequelize 可以帮助我们快速方便地实现模型的增删改查等基本操作。下面我们介绍如何在 Express 中使用 Sequelize 实现增删改查功能。

首先安装 express 和 sequelize,使用 Sequelize ORM 需要同时安装 sequelize 和 sequelize-cli 第三方模块:

注意:当 sequelize 安装成功后,需要在 models 目录下创建一个 index.js 文件:

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

在 index.js 文件中引入 sequelize,并同时引入 User 和 Course 模型,并且导出所有的模型。这样,在我们应用中可以通过 require('./models') 引入 sequelize 和初始化后的所有模型。

接下来,我们可以实现如下增删改查的 API

创建记录

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

在上述代码中,我们使用了 models.User.create() 方法会自动创建新的记录,并将其保存到数据库中。由于我们已经将模型导入到一个 models 对象中了,所有可以访问 User 模型,models.User.create() 方法接收 JSON 格式的数据。

获取记录

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

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

在上述代码中,我们首先使用了 models.User.findAll() 方法获取所有记录,并将它们以 JSON 格式返回。在 /api/users/:id 路由中,我们根据传递的 id 参数,使用 models.User.findOne() 方法来查找对应的记录,并返回。

创建记录

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

在上述代码中,我们使用了 models.User.create() 方法会自动创建新的记录,并将其保存到数据库中。由于我们已经将模型导入到一个 models 对象中了,所有可以访问 User 模型,models.User.create() 方法接收 JSON 格式的数据。

更新记录

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

在上述代码中,我们使用了 models.User.update() 方法会更新一条已存在的记录,并通过 models.User.findByPk() 来获取已更新的记录,并以 JSON 格式返回。

删除记录

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

在上述代码中,我们使用了 models.User.destroy() 方法来删除记录,并返回状态码 status 204,代表删除成功。

Sequelize 中的高级查询

Sequelize ORM 对于关系型数据库的查询支持是非常强大的,并且 Sequelize 的查询 API 简单易用。

使用 where 对数据进行筛选

在 Sequelize 中,我们可以使用 where 参数来对数据进行筛选。下面是一个使用 where 参数的示例:

在上述代码中,我们使用了 models.User.findOne() 方法查找数据库中 email 属性为 'hello@world.com' 的第一条记录。

使用 order 对数据进行排序

在 Sequelize 中,我们可以使用 order 参数来进行数据排序。下面是一个使用 order 参数的示例:

在上述代码中,我们使用了 models.User.findAll() 方法返回按照 createdTime 倒序排列的所有用户。

使用 limit 和 offset 实现数据分页

在 Sequelize 中,我们可以使用 limit 和 offset 参数实现数据分页。下面是一个使用 limit 和 offset 参数的示例:

在上述代码中,我们使用了 models.User.findAll() 方法返回从 11 条数据开始的 10 条数据。

使用 include 实现数据连接查询

在 Sequelize 中,我们可以使用 include 参数实现数据连接查询。下面是一个使用 include 参数的示例:

在上述代码中,我们使用了 models.User.findAll() 方法返回所有用户,同时返回每个用户的所有课程的标题(title)。在这里,我们使用了 include 参数来实现数据连接查询。其中第一个参数是一个对象,包含了我们希望跨表查询的属性,第二个参数是用于限制要获取的属性。

使用 filter 实现复杂的数据筛选操作

在 Sequelize 中,我们可以使用 filter 功能实现复杂的数据筛选操作。下面是一个使用 filter 的示例:

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

在上述代码中,我们使用 Op 对象实现复杂的数据筛选操作,并返回所有年龄在 20 到 30 岁之间的用户。

总结

本文介绍了如何在 Express 中使用 Sequelize ORM,并提供了一些 Sequelize 的高级查询技巧。Sequelize ORM 功能强大、易于使用,帮助开发者快速方便地创建和管理数据表,并帮助他们更好地理解和使用 Sequelize 框架。当你深入理解 Sequelize 框架后,相信你会在开发中大放异彩。最后,我们一起祝愿大家在使用 Sequelize 框架时获得成功。

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

纠错
反馈