Koa 中使用 Sequelize 操作 PostgreSQL 数据库

阅读时长 13 分钟读完

随着 JavaScript 的普及和 Web 应用的发展,前端开发也越来越重要,尤其是在 Node.js 生态环境下,前端开发人员需要掌握更多的后端相关知识。本文将介绍如何使用 Koa 框架及 Sequelize ORM 操作 PostgreSQL 数据库,帮助读者快速掌握该技术。

Koa 简介

Koa 是一个小巧、灵活、富有表现力的 Node.js web 框架,它由 Express 和 Connect 的核心开发者推出。Koa 使用了 async/await 来解决 Node.js 的异步回调问题,使得代码更加简洁、易读、易维护。同时,它的中间件机制也让开发者可以轻松实现各种需求。

Sequelize 简介

Sequelize 是 Node.js 中一款优秀的 ORM(Object-Relational Mapping)库,支持 PostgreSQL、MySQL、MariaDB、SQLite 和 MSSQL 等多个数据库。Sequelize 可以将数据库操作转换为对象的操作,比原生 SQL 编码更加简单方便,并且具备事务管理、数据操作、关联查询等多种功能。

PostgreSQL 简介

PostgreSQL 是一种强大,开源的关系型数据库管理系统,最初的设计目的是提供机构级别的数据库解决方案。PostgreSQL 通过 ACID 属性和完整性约束来保证数据的一致性和可靠性,可用于支持大数据量应用、Web 服务、企业软件等各种场景。

使用 Koa 和 Sequelize 操作 PostgreSQL

接下来,让我们通过一个示例来演示如何使用 Koa 框架和 Sequelize 操作 PostgreSQL 数据库。假设我们需要创建一个博客系统,我们需要创建一个名为 users 的用户表和一个名为 articles 的文章表,它们之间存在一对多关系。

环境准备

在开始前,请确保您已经安装了 Node.js 和 PostgreSQL 数据库。安装方法可以参考官方文档:

我们将使用 npm 包管理器来安装所需的模块。在命令行中执行以下命令:

创建数据库和数据表

使用 PgAdmin4 或者在命令行中创建一个名为 koa_sequelize 的数据库,并在该数据库中创建 usersarticles 两张表,表结构如下:

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

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

初始化 Sequelize

在项目的根目录下,创建一个名为 models 的文件夹,用于存放 Sequelize 的模型文件。然后在该文件夹下创建一个名为 index.js 的文件,用于初始化 Sequelize 并连接 PostgreSQL 数据库:

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

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

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

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

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

其中,config.js 文件用于存放数据库配置信息:

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

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

定义 Sequelize 模型

models 文件夹下创建两个名为 User.jsArticle.js 的文件,用于定义用户和文章两个 Sequelize 模型。其中 User.js 文件内容如下:

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

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

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

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

Article.js 文件内容如下:

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

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

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

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

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

在上述代码中,UserArticle 分别表示用户对象和文章对象,它们并不是直接映射到数据库表的,而是通过 sequelize.define() 方法来定义模型。该方法有三个参数:

  1. 第一个参数为模型名称,同时也是数据库表名。
  2. 第二个参数为用于定义模型字段的对象。
  3. 第三个参数为用于定义模型选项的对象。

在模型定义中,我们使用了 Sequelize 提供的常见字段类型和选项,如 INTEGERSTRINGTEXT 等。此外,我们还使用了 belongTo() 方法定义了关联关系,表示每篇文章属于一个用户,在关联的用户对象中添加 userId 字段。

定义 Koa 路由和 API 接口

接下来,我们需要在 Koa 中创建路由以及 API 接口,用于处理用户和文章的 CRUD 操作。在项目的根目录下创建一个名为 app.js 的文件,用于创建 Koa 应用,并创建相关的路由:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在该文件中,我们首先导入了 Koa 相关的模块和 Sequelize 数据模型,然后创建了一个 Koa 应用和路由对象,用于定义各个 RESTful API。其中:

  • router.get() 表示 GET 方法请求;
  • router.post() 表示 POST 方法请求;
  • router.put() 表示 PUT 方法请求;
  • router.delete() 表示 DELETE 方法请求。

在路由中,我们通过 Sequelize 提供的 API 来查询、创建、更新和删除用户和文章数据。如果数据不存在,则使用 ctx.throw() 函数抛出 404 异常。通过 ctx.request.body 来获取 POST 和 PUT 方法的请求参数,使用 ctx.body 返回响应数据。

测试 API 接口

保存以上代码后,在命令行中执行以下命令启动 Koa 应用:

在浏览器中输入 http://localhost:3000 访问首页,可以看到 Hello World! 字符串。通过 Postman 等工具,请求以下 API 接口,测试其功能:

  • GET /users:查询所有用户
  • GET /users/:id:查询单个用户
  • POST /users:创建用户
  • PUT /users/:id:更新用户
  • DELETE /users/:id:删除用户
  • GET /articles:查询所有文章
  • GET /articles/:id:查询单个文章
  • POST /articles:创建文章
  • PUT /articles/:id:更新文章
  • DELETE /articles/:id:删除文章

总结

在本文中,我们了解了如何在 Koa 框架中使用 Sequelize ORM 操作 PostgreSQL 数据库。通过该技术,我们可以轻松实现 Web 应用的数据持久化特性,快速开发功能强大的后端应用。笔者建议读者再通过官方文档深入了解 Koa 和 Sequelize 的使用方法,不断提升自己的技术水准。

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

纠错
反馈