使用 Express.js 和 Sequelize 进行关系型数据库 CRUD 操作

阅读时长 13 分钟读完

前言

在现代 Web 开发中,关系型数据库是不可缺少的一部分。Node.js 提供了许多模块来处理数据库操作,而其中比较流行的是 Sequelize,它是一个基于 Promise 的 ORM 框架。在本文中,我们将会介绍如何使用 Sequelize 进行关系型数据库的 CRUD(增删改查)操作,并且结合 Express.js 实现一个完整的示例。

什么是 Sequelize

Sequelize 是一个基于 Promise 的 Node.js ORM(对象关系映射)框架,它支持普通的 SQL 语句和事务,同时也支持 PostgreSQL、MySQL、MariaDB、SQLite 和 MSSQL 等关系型数据库。Sequelize 可以将数据库表和 Sequelize 模型进行映射,从而实现方便的数据管理和查询操作。

前置要求

在开始学习 Sequelize 和 Express.js,您需要事先具备以下知识:

  • Node.js 基础开发知识
  • JavaScript ES6 语法
  • MySQL 数据库基础知识
  • Express.js 基础开发知识

安装和配置

在本文中,我们将使用以下依赖库:

  • Node.js v12 或以上版本
  • NPM v6 或以上版本
  • Express.js v4
  • Sequelize v6

首先,我们需要创建一个新的 Node.js 项目并初始化它:

然后,我们需要安装以下依赖库:

其中,mysql2 是 MySQL 数据库驱动程序,您可以使用其他的数据库驱动程序,比如 pg 或者 sqlite3 等,具体可以参考 Sequelize 的文档。

下一步,我们需要在项目的根目录下创建一个 .env 文件,用来保存数据库连接信息,内容如下:

其中,DB_HOSTDB_PORTDB_USERNAMEDB_PASSWORDDB_DATABASE 分别是数据库的主机名、端口号、用户名、密码和数据库名,您需要根据自己的实际情况进行修改。

最后,在项目根目录下创建一个 app.js 文件,并编写以下代码:

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

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

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

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

---------------- -- -- -
  -------------------- --- --------- -- ---------------------------
---
展开代码

其中,我们使用 dotenv 模块读取 .env 文件中的环境变量,然后创建了一个 Sequelize 实例并进行了数据库连接测试。

到现在为止,我们已经完成了 Sequelize 和 Express.js 的安装和配置,开始了解如何使用 Sequelize 进行 CRUD 操作。

Sequelize 的模型定义

在 Sequelize 中,模型是将数据库表映射为 JavaScript 对象的一种方式。每个模型都代表了一个数据库表,模型中的属性对应了数据库表中的列,模型实例对应了数据库表中的一行数据。

我们可以通过 sequelize.define() 方法定义一个新的模型,它接受三个参数:模型名称、属性对象和一些其他的选项。例如,我们可以定义一个 Todo 模型来表示一个待办项:

-- -------------------- ---- -------
----- ---- - ------------------------ -
  --- -
    ----- ---------------------------
    -------------- -----
    ----------- -----
  --
  ------ -
    ----- ----------------------
    ---------- ------
  --
  ---------- -
    ----- ------------------
    ---------- ------
    ------------- ------
  --
-- -
  ----------- -----
  ------------ -----
  ---------- --------
---
展开代码

其中,我们定义了三个属性:

  • id:表示待办项的唯一标识符,它是一个自增的无符号整数。
  • title:表示待办项的标题,它是一个长度为 100 的字符串,不能为空。
  • completed:表示待办项的完成状态,它是一个布尔值,默认值为 false。

除了属性以外,我们还可以指定一些其他选项:

  • timestamps:指定是否自动生成 createdAt 和 updatedAt 两个字段,表示每个记录的创建时间和更新时间。该选项默认值为 true。
  • underscored:指定是否使用下划线作为模型和列名之间的分隔符。该选项默认值为 false。
  • tableName:指定模型对应的数据库表名。如果不指定,则默认使用模型名称的复数形式。

Sequelize 的 CRUD 操作

在了解了模型定义之后,我们可以开始进行 Sequelize 的 CRUD 操作了。Sequelize 提供了多种方法来进行数据的增删改查操作,下面分别介绍。

增加操作

我们可以使用模型的 create() 方法向数据库中插入一条记录,例如:

其中,create() 方法的参数是一个对象,它的属性名称对应了模型的属性名称。在插入成功后,then() 方法的参数就是插入的记录实例,我们可以使用 toJSON() 方法将它转换为 JSON 格式的数据。

删除操作

我们可以使用模型的 destroy() 方法从数据库中删除一条记录。例如,我们可以删除完成状态的待办项:

其中,destroy() 方法的参数是一个对象,它的 where 属性表示删除的条件。在删除成功后,then() 方法的参数就是被删除的记录数量。

修改操作

我们可以使用模型的 update() 方法从数据库中更新一条记录。例如,我们可以将待办项的完成状态改为已完成:

-- -------------------- ---- -------
-------------
  ---------- -----
-- -
  ------ -
    --- --
  --
--------------- -- -
  -------------------- -------- ---------
---
展开代码

其中,update() 方法的第一个参数是一个对象,它表示要更新的属性名称和属性值。第二个参数是一个对象,它的 where 属性表示更新的条件。在更新成功后,then() 方法的参数就是被更新的记录数量。

查询操作

我们可以使用模型的 findAll() 方法来查询一条或多条记录。例如,我们可以查询所有未完成的待办项:

其中,findAll() 方法的参数是一个对象,它的 where 属性表示查询的条件。在查询成功后,then() 方法的参数是一个包含所有查询结果的数组。

如果我们只需要查询一条记录,可以使用模型的 findOne() 方法来查询,例如:

类似地,findOne() 方法的参数是一个对象,它的 where 属性表示查询的条件。在查询成功后,then() 方法的参数就是一个记录实例。

在 Express.js 中使用 Sequelize

在了解了 Sequelize 的模型定义和 CRUD 操作之后,我们可以将它与 Express.js 集成,实现一个完整的示例。

首先,我们在 app.js 文件中添加以下代码:

其中,我们引入了一个名为 todoRouter 的路由器,并将它绑定到 /todos 路径下。在下一步中,我们将在 routes/todo.js 文件中定义路由器。

routes/todo.js 文件中,我们需要引入模型定义和 Express.js:

然后,我们定义以下路由:

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

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

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

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

-- -----
--------------------- ----- ---- ----- -- -
  --------------
    ------ -
      --- --------------
    --
  --
    ------------- -- -
      -- ------ --- -- -
        ---------------------- -------- ----- --- ------- ---
      - ---- -
        ---------- -------- ----- --------- ---
      -
    --
    ------------ -- -
      ----------
    ---
---
展开代码

其中,/ 路径对应查询所有待办项,/:id 路径对应查询单个待办项,POST / 路径对应创建待办项,PUT /:id 路径对应更新待办项,DELETE /:id 路径对应删除待办项。

在定义完路由器之后,我们需要在 app.js 文件中引入路由器:

最后,我们运行以下命令启动应用程序并测试它:

打开浏览器并访问 http://localhost:3000/todos,应该可以看到所有的待办项。您也可以使用 curl 命令或者其他的 HTTP 客户端进行查询、创建、更新和删除操作。例如,运行以下命令创建一个新的待办项:

如果一切正常,您应该可以看到类似以下的响应:

结论

在本文中,我们介绍了如何使用 Express.js 和 Sequelize 进行关系型数据库的 CRUD 操作,包括模型定义、创建、查询、更新和删除操作,并提供了一个完整的示例。希望这篇文章可以对您有所帮助,谢谢阅读!

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

纠错
反馈

纠错反馈