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

前言:本文主要介绍如何在 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


猜你喜欢

  • Next.js 中实现组件生命周期函数

    Next.js 是一款基于 React 的服务端渲染框架,它提供了一系列易于使用的 API,为开发者提供了诸多便利。在 Next.js 中,我们可以通过实现组件生命周期函数来实现更加灵活的组件渲染。

    1 年前
  • Kubernetes 中使用 CRD 扩展资源对象

    Kubernetes 是目前最流行的容器编排系统之一,广泛用于云原生应用的实现和部署。Kubernetes 的众多功能和强大的扩展性,使得其在云原生应用开发中扮演着非常重要的角色。

    1 年前
  • Sequelize 在 Egg.js 上实践与优化

    Sequelize 在 Egg.js 上实践与优化 Sequelize 是一个 Node.js 中的 ORM(对象关系映射工具),它允许我们使用 JavaScript 代码来操作关系数据库。

    1 年前
  • Custom Elements 实现自定义时间选择器的技巧

    前言 在 Web 开发中,自定义元素(Custom Elements)是一个非常有用的工具,它允许开发者创建自定义的 HTML 元素,可以让开发者更加灵活自如地构建页面。

    1 年前
  • ES9 中代替 eval 的方案

    ES9 中代替 eval 的方案 在前端开发中,我们经常需要执行一些动态的代码。在 JavaScript 中,一种最常见的实现动态执行代码的方式是使用 eval 方法。

    1 年前
  • 如何使用 TailwindCSS 制作响应式表格布局?

    TailwindCSS 是一种工具库,它提供了一系列的 CSS 类,可以用来快速而灵活地构建用户界面。它的设计思路是基于功能而非样式,因此可以让开发者更加专注于业务逻辑。

    1 年前
  • Serverless 应用中如何实现任务调度?

    什么是 Serverless? Serverless 是一种云计算架构思想,它将应用程序代码与运行时环境分离。相较于传统的云计算架构方式,Serverless 使应用程序的开发、管理和部署更加简单和灵...

    1 年前
  • Jest 运行测试时,如何保留测试结果并在外部使用

    Jest 是目前前端自动化测试领域的翘楚之一。它不仅支持常见的测试场景,例如单元测试、集成测试等,而且还支持自动化测试的方方面面,例如 Mock、Snapshot、覆盖率等。

    1 年前
  • RESTful API 与 Web 服务的比较

    随着业务的发展,越来越多的企业需要开发并提供各种 Web 服务来满足客户需求。RESTful API 和 Web 服务作为常见的两种技术方案,都能够实现数据传输和服务调用。然而,它们之间存在一些区别。

    1 年前
  • PWA 应用中的 Notification API 出现错误,如何解决?

    Progressive Web App(PWA)应用中的 Notification API,可以为用户提供交互式通知功能。但是在实际开发中,我们经常会遇到 Notification API 出现错误的...

    1 年前
  • ECMAScript 2019 (ES10) 新特性简介

    ECMAScript 是一种用于编写 Web 应用程序的通用脚本语言。它是 JavaScript 的标准化版本,与 JavaScript 如出一辙。而 ECMAScript 2019 (ES10) 是...

    1 年前
  • ES12 中的类继承:实现方法重载

    ES12 已经成为了前端开发中越来越重要的标准,其中类继承是一个非常实用的功能。在 ES12 中,类继承的实现变得更加强大和灵活,使得开发者能够更加方便地实现一些类似于方法重载的功能。

    1 年前
  • PM2 进程管理器的使用

    介绍 在前端开发中,我们常常需要启动很多应用程序。这些程序可能包括 web 服务器、前端部署程序、后台任务等等。为了方便管理,我们需要一个工具来启动、停止、重启这些程序,并且可以随时查看它们的状态。

    1 年前
  • 在 Deno 中使用文件系统

    Deno 是一个现代的 JavaScript/TypeScript 运行时环境,它内置了许多强大的标准库,包括文件系统(文件 I/O)模块。在本文中,我们将深入探索 Deno 中的文件系统模块,讨论如...

    1 年前
  • Windows Server 的 IIS 性能优化实践

    IIS 是 Windows Server 自带的 Web 服务器软件,可以用于承载和发布 Web 应用程序,常用于 ASP.NET、PHP 和静态网站托管的服务。但是,当网站访问量增大时,IIS 往往...

    1 年前
  • 使用 ES6/ES2015 中的模块系统

    在前端开发中,模块化是非常重要的一部分,它可以让我们更有效地管理代码,提高代码的可维护性和可读性。在ES6/ES2015中,模块化的支持被集成到了语言本身中,使得开发者可以更方便地使用模块系统,本文将...

    1 年前
  • 使用 Mocha 测试 WebSocket 应用

    前言 WebSocket 是一种在 Web 应用中实现双向通信的协议,可用于实时数据传输和在线游戏等场景。由于 WebSocket 应用与传统 Web 应用有所不同,开发者常常需要面对更多的测试工作。

    1 年前
  • Web Components 中样式层与功能层的拆分方法

    Web Components 是一种根据 W3C 标准开发的组件化技术,它能够让我们将一个复杂的页面拆分成多个独立的组件,使得组件具有良好的复用性和可维护性。在 Web 组件的开发中,样式与功能是两个...

    1 年前
  • 如何在 Docker 容器中动态地调整 nginx 负载均衡

    在实际项目中,负载均衡是一个非常重要的问题,而 nginx 是当前最流行的负载均衡器之一。但是,在 Docker 容器化的环境中,我们如何动态地调整 nginx 的负载均衡呢?本文将为你介绍如何在 D...

    1 年前
  • 使用 Enzyme 报错 TypeError: Cannot read property 'text' of undefined 怎么解决?

    背景 在前端开发过程中,我们需要用到一些工具和库来进行开发和测试。Enzyme 是一个 React 应用的 JavaScript 测试工具库,专为 React 的代码编写而设计。

    1 年前

相关推荐

    暂无文章