如何在 Node.js 中使用 Sequelize 进行 ORM 操作?

什么是 Sequelize?

Sequelize 是一个基于 Node.js 的 ORM(Object-Relational Mapping)框架,它提供了一个简单易用的 API 来操作数据库。它支持多种数据库:SQLite、MySQL、MariaDB、PostgreSQL 和 MSSQL 等,并且可以通过插件支持更多的数据库。

使用 Sequelize 可以将关系型数据库的表映射为 JavaScript 对象,避免了手动编写 SQL 语句进行数据库操作的麻烦。它还提供了一些方便的功能,比如数据验证、生命周期钩子等。

如何在 Node.js 中使用 Sequelize?

在使用 Sequelize 前,需要先安装它:

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

接着,需要安装对应的数据库驱动,比如安装 MySQL 驱动:

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

在安装完之后,就可以在 Node.js 中使用 Sequelize 了。下面是一个使用 Sequelize 操作 MySQL 数据库的示例:

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

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

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

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

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

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

在这个例子中,我们首先创建了一个 Sequelize 实例,设置了数据库的连接信息。然后我们定义了一个名为 user 的表,它有 idnameage 这三个字段。我们可以使用 findAll 函数查询所有的用户,并可以使用 create 函数添加一个新用户。同时,我们还可以使用 update 函数去更新一些字段,使用 destroy 函数去删除一些数据。

Sequelize 的模型定义

在上面的示例中,我们定义了一个名为 user 的表。实际上,我们通过 Sequelize 可以方便地定义模型。模型是由多个实例组成的对象,每个实例代表数据库中的一行数据。Sequelize 中可以使用一个类定义模型,例如:

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

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

在这里,我们定义了一个名为 User 的类,它继承自 Sequelize.Model。我们通过 User.init 函数定义了表的结构。此外,我们可以通过传递给 User.init 函数的第二个参数去定义一些选项,比如这个表的名字,它的存储引擎等。

Sequelize 的数据验证

在实际的应用中,我们需要验证数据的正确性,避免一些不好的输入。Sequelize 提供了一些内置的验证器,比如 notNullnotEmptyisEmail 等,我们可以在模型定义中使用这些验证器,例如:

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

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

在这里,我们在 name 属性上使用了 len 验证器,它表示这个字符串的长度必须在 2 到 10 之间。如果这个验证器失败,它会返回包含错误信息的对象。在 age 上我们使用了 minmax 验证器,表示它必须大于等于 0,小于等于 200。

Sequelize 的生命周期钩子

Sequelize 中还提供了一些生命周期钩子,它允许我们在模型的生命周期中执行一些操作。例如,我们可以在保存一个模型实例之前对其进行修改,或者在验证失败时进行一些操作。下面是一些常用的钩子函数:

  • beforeValidate
  • afterValidate
  • beforeCreate
  • afterCreate
  • beforeUpdate
  • afterUpdate
  • beforeDestroy
  • afterDestroy

我们可以通过添加这些函数来执行我们想执行的操作。例如,我们可以在保存模型实例之前对其进行加密:

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

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

在这里,我们在保存一个用户之前,使用 bcrypt 函数对其密码进行加密。我们还定义了两个生命周期钩子,分别在验证以及创建之前被调用。

总结

在本文中,我们介绍了如何在 Node.js 中使用 Sequelize 进行 ORM 操作。我们学习了如何定义模型、对数据进行验证以及使用生命周期钩子。Sequelize 为 Node.js 提供了一个强大且简单易用的 API,可以大大提高我们的开发效率。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64ce1630b5eee0b52560af21


猜你喜欢

  • ECMAScript 2021 (ES12) 中 Promise.any 的使用方法探究

    前言 JavaScript 中的 Promise 极大地改善了异步编程的方式,减少了 callback hell 的问题。随着时代的推移,ECMAScript 每年都会新发布一版,不断引入新的特性和语...

    1 年前
  • Web Components 详解 | 从 Shadow DOM 到 Custom Elements

    概述 Web Components 是一组可以使开发者更加轻松地开发自定义 HTML 元素的技术标准,其由 Shadow DOM、Custom Elements 和 HTML Templates 组成...

    1 年前
  • ES10 String.prototype.{trimStart, trimEnd} 方法的使用教程

    JavaScript 是目前最为流行的编程语言之一,而前端开发则是 JS 的重要应用领域之一。丰富的语言特性让 JavaScript 可以支持各种各样的编程风格,同时也让其语言规范得到了多次的升级。

    1 年前
  • Socket.io 如何实现群聊和私聊

    Socket.io 是一个实现实时通信的库,它让开发者能够快速地建立双向通信的应用程序。Socket.io 能够运行在 Web 浏览器、Node.js 和其他支持 WebSocket 的平台上。

    1 年前
  • 在 SPA 应用中使用 ElementUI 的最佳实践教程

    随着 Vue 的流行,ElementUI 成为了众多前端开发者的首选 UI 框架之一。然而,在 SPA (Single Page Application)应用中,ElementUI 的使用需要一些特殊...

    1 年前
  • 如何使 Koa.js 应用程序、PM2 进程守护和 Nginx 之间相互协作

    前言 在前端开发中,Koa.js 是一个非常优秀的 Node.js 框架,它可以使我们快速地构建 Web 应用程序。不过,在实际应用中,单纯地使用 Koa.js 运行应用程序并不能满足我们的需求,我们...

    1 年前
  • Cypress 测试框架中自动化测试实践及经验总结

    在前端开发中,保证代码质量和稳定性是非常重要的。而自动化测试,尤其是端对端(End-to-End,简称 E2E)测试对于保证代码质量和稳定性则是不可或缺的。Cypress 是一个现代化的 E2E 测试...

    1 年前
  • 使用 Enzyme 测试 Ant Design Pro 组件

    Ant Design Pro 是一个基于 Ant Design 设计风格的一套开箱即用的中台前端/设计解决方案。Ant Design Pro 提供了丰富的组件和模板,还成功地集成了 React、Red...

    1 年前
  • Babel 如何实现在浏览器端支持 ES6

    背景 ES6(ECMAScript 2015)是 JavaScript 的一种新版本,它引入了许多新的特性,如箭头函数、模板字符串、解构赋值等,这些新特性使得代码更加优雅、可读性更好。

    1 年前
  • ES9 如何解决模块循环依赖问题

    在前端开发中,模块化已经成为了很多人的习惯和必备技能。但是,在使用模块化开发的过程中,我们可能会遇到一种很棘手的问题,那就是模块循环依赖。这种问题在很多场景下都会出现,如果处理不当,会导致程序运行时出...

    1 年前
  • 如何正确使用 ES7 的 Async/Await

    在前端开发中,异步操作是非常常见的。而在 ES6 中,加入了 Promise,让异步操作的处理更加优雅。但即使使用了 Promise,仍然需要写很多的 Callback 回调函数,代码可读性也并不太好...

    1 年前
  • ECMAScript 2017 中 BigInt 类型的使用

    随着数字技术的不断发展,数字计算的需求也愈发复杂。JavaScript 作为一门支持数字计算的语言,当然也不例外。在 ECMAScript 2017 标准中,新增加了 BigInt 类型,以方便处理超...

    1 年前
  • 前端开发中的 Redux-thunk 异步处理数据

    在前端开发中,管理数据状态是必不可少的一项任务,Redux 是当前最流行的状态管理库之一,而它则有定制的中间件,比如 Redux-thunk,在处理异步数据请求方面表现良好。

    1 年前
  • 使用 Sequelize ORM 连接 MySQL,PostgreSQL 和 SQLite

    简介 Sequelize 是一个基于 Node.js 的 ORM(Object-Relational Mapping)框架,可以帮助我们快速地连接和操作 MySQL、PostgreSQL 和 SQLi...

    1 年前
  • Rxjs 中 takeUntil 操作符及其实现方式

    RxJS 是一个用于把异步数据处理文化的 JavaScript 库,是响应式编程的一种体现。RxJS 自带了各种操作符来处理各种异步数据流,其中 takeUntil 操作符就是其中之一。

    1 年前
  • Webpack Bundle Analyzer 使用方法及优化技巧

    什么是Webpack Bundle Analyzer Webpack Bundle Analyzer是一个可以分析Webpack打包后生成的JavaScript文件的工具,并以可视化的方式展示其包大小...

    1 年前
  • SASS 中的嵌套选择器的最佳实践

    SASS 是一种 CSS 预处理器,它提供了丰富的语法和功能,可以让我们更加快捷、高效地编写 CSS。其中嵌套选择器是 SASS 的一个特性,它可以让我们在编写样式时更加清晰简洁。

    1 年前
  • Chai.js expect 语法中的 `to.be.empty` 和 `to.not.be.empty` 详解

    Chai.js expect 语法中的 to.be.empty 和 to.not.be.empty 详解 Chai.js 是一个非常流行的 JavaScript 断言库,它可以用于编写单元测试和集成测...

    1 年前
  • Next.js 如何管理全局状态?

    在前端开发中,管理全局状态是一个非常重要的任务。随着应用程序的增长,状态管理会变得更加困难,因为需要并行地组织和管理多个状态。对于 React 应用程序,有许多解决方案可以解决这个问题,其中之一是 N...

    1 年前
  • 如何使用 PM2 监控 Node.js 应用的网络流量和延迟

    在 Web 应用开发中,我们经常需要监控我们的应用程序的网络流量和延迟。这对于评估应用性能和优化应用非常重要。在本篇文章中,我们将介绍如何使用 PM2 来监控 Node.js 应用程序的网络流量和延迟...

    1 年前

相关推荐

    暂无文章