在 Express.js 中使用 MySQL 数据库的最佳实践

在开发 Web 应用程序时,使用数据库是必不可少的。随着网络技术的发展,开源的关系数据库软件 MySQL 成为了开发者们的首选。在 Node.js 中,我们可以使用第三方库来实现与 MySQL 数据库的交互。其中最接近标准的就是 mysql2 库。本文将介绍如何在 Express.js 中使用 mysql2 库,并提出一些最佳实践,使你的 Web 应用程序能够更加健壮和高效。

一、安装 mysql2 库

在开始之前,首先需要安装 mysql2 库,可以通过 npm 快速完成。在终端中输入以下命令即可:

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

二、连接 MySQL 数据库

连接 MySQL 数据库是使用 mysql2 库的第一步。在 Express.js 中,应该在应用程序的入口文件中建立数据库连接。以下是建立连接的示例代码:

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

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

在上面的示例代码中,我们使用了 mysql2/promise,这样可以使用 async/await 语法来编写代码。因为数据库连接是异步操作,所以需要对 createConnection 方法进行 await,直到连接成功后才能执行后面的代码。

三、处理 SQL 语句

MySQL 是一个 SQL 数据库,我们需要用 SQL 语句来操作它。尽管我们可以直接将 SQL 语句写在 JavaScript 代码中,但这样的实现方式不仅混乱而且可能会导致安全漏洞。为了更好地管理 SQL 语句,我们可以将它们存储在单独的文件中,以便于维护。

在 Express.js 中,我们可以使用 fs 模块来读取 SQL 文件。以下是读取文件的示例代码:

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

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

在上面的示例代码中,我们使用 fs.readFileSync 方法来读取文件,使用 path.resolve 方法来获取绝对路径。

四、使用连接池

在生产环境中,需要处理大量并发请求,这时候一个数据库连接可能无法满足需求。因此,我们需要使用连接池。

在 Express.js 中,我们可以使用 mysql2/promise 库提供的功能来创建连接池。以下是创建连接池的示例代码:

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

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

在上面的示例代码中,我们使用 mysql.createPool 方法来创建连接池,并设置了连接池的大小为 10。

在使用连接池时,我们需要从连接池中获取连接,执行完 SQL 语句后,将连接释放回连接池。以下是在 Express.js 中使用连接池的示例代码:

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

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

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

在上面的示例代码中,我们使用 pool.getConnection 方法从连接池中获取连接,并使用 connection.execute 方法执行 SQL 语句。执行完 SQL 语句后,将连接释放回连接池。

五、使用事务

在需要保证 ACID 特性和数据一致性的操作中,我们需要使用事务。在 Express.js 中,我们可以使用连接池提供的事务功能来实现事务。以下是在 Express.js 中使用事务的示例代码:

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

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

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

在上面的示例代码中,我们使用 connection.beginTransaction 方法开始事务,使用 connection.commit 方法提交事务,使用 connection.rollback 方法回滚事务。

六、结论

使用 MySQL 数据库是开发 Web 应用程序的重要部分。在 Express.js 中,我们可以使用 mysql2 库来管理 MySQL 数据库,从而实现 Web 应用程序的高效和健壮。本文提出了一些在使用 mysql2 库中的最佳实践。这些实践包括连接 MySQL 数据库、管理 SQL 语句、使用连接池、以及使用事务。我们相信这些实践可以帮助你更好地使用 mysql2 库,从而编写出更加健壮和高效的 Web 应用程序。

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


猜你喜欢

  • 使用 TypeScript 实现高质量的 React 应用程序

    前言 React 是一个非常流行的 JavaScript 库,它可以帮助开发者快速构建 Web 应用程序。但是,在开发大型 React 应用程序时,难免会有一些问题,例如类型错误、代码难以维护等。

    11 天前
  • RxJS 中的逆转操作符使用指南

    RxJS 是一个强大的库,可以为前端开发人员大大简化异步操作。在使用 RxJS 时,逆转操作符是非常有用的工具,可以用于将事件流逆转并操作流中的元素。本文将介绍 RxJS 中的逆转操作符,如何使用它们...

    11 天前
  • 在Fastify应用程序中使用YAML配置文件

    Fastify,是一个基于Node.js的高效开发框架,它的速度比大多数Web框架都要快。配置文件在服务器端应用程序开发中具有重要的作用,它可以帮助我们快速且方便地配置应用程序。

    11 天前
  • Headless CMS 在数字化医疗领域的应用场景探索

    在数字化医疗领域,随着技术的不断进步,越来越多的医疗机构开始使用 Headless CMS 技术来构建数字化应用。Headless CMS 技术允许开发者从传统的 CMS 模式中解脱出来,创造出更加灵...

    11 天前
  • Tailwind CSS 如何兼容 IE 和 Edge

    Tailwind CSS 是一种流行的前端库,它可以帮助开发者快速构建样式,使得页面看起来更加漂亮。然而,尽管大多数现代浏览器支持最新的 CSS 特性,但一些老旧的浏览器(比如 IE 和 Edge)并...

    11 天前
  • GraphQL 中的数据模型设计解析及最佳实践

    在现代 Web 开发中,前后端分离的开发模式已经得到了广泛的应用。GraphQL 作为一种新的 API 开发和查询语言,提供了一种更加灵活、高效的数据交互方式,被越来越多的开发者所关注和使用。

    11 天前
  • 如何在 Deno 中测试代码

    Deno 是一个安全可靠的 JavaScript 和 TypeScript 运行时环境,它内置了很多有用的工具和特性,例如内置的模块系统、异步 I/O、安全沙箱等等,让我们可以更加方便地构建与运行 W...

    11 天前
  • ECMAScript 2021(ES12)中的Reflect新特性:详解与实例

    Reflect是JavaScript中一个非常有用的内置对象,它提供了许多常见操作的底层方法,如创建对象和修改属性等。在ECMAScript 2021(ES12)中,Reflect引入了一些新特性,本...

    11 天前
  • CSS Reset 的重要性和优点

    CSS Reset 是一种用于重置浏览器默认样式的技术,它能够清除大量不必要的样式,并使不同浏览器在显示页面时保持一致。此外,CSS Reset 还能够使开发人员更加方便地编写样式,避免因不同浏览器的...

    11 天前
  • 如何使用 Chai.js 编写 JavaScript 的可维护性单元测试

    什么是 Chai.js Chai.js 是一个流行的 JavaScript 断言库,它可以与许多测试框架配合使用,如 Mocha,Jasmine 等。Chai.js 提供了自然语言的断言语法,可以方便...

    11 天前
  • 提供图形化无障碍信息的网站设计技巧

    我们设计网站时,要考虑到残障人士也能够方便地访问和使用网站。其中一个重要的方面就是提供图形化无障碍信息。本篇文章将介绍一些网站设计的技巧,旨在让你能够设计出易于残障人士使用的网站。

    11 天前
  • 解决 Cypress 访问站点 403 错误的问题

    最近在使用 Cypress 进行前端自动化测试时,遇到了访问站点发生 403 错误的问题。这个问题很常见且容易解决,但是对新手来说可能会遇到很多困难。在这篇文章中,我将为大家提供解决这个问题的方法和技...

    11 天前
  • 如何优化 Serverless 应用的 API 速度

    随着云服务的普及,越来越多的应用被部署到 Serverless 平台上,其中最为常见的是基于 AWS Lambda 的应用。然而,虽然 Serverless 的许多优点已经被广泛认可,但在处理高并发流...

    11 天前
  • JavaScript 中响应式设计的 18 个技巧和技术!

    前言 随着 Web 应用程序越来越复杂,开发者们面临着越来越多的挑战,其中之一就是实现响应式设计。响应式设计意味着能够在不同的屏幕尺寸和设备上自适应地呈现内容。这种设计方法不仅可以提高用户体验,还可以...

    11 天前
  • Next.js 的持续集成和部署流程

    随着前端项目越来越复杂,我们需要一种更加高效、可靠的方式来持续部署和交付我们的应用。Next.js 是一种流行的 React 框架,它提供了一些有用的工具来简化持续集成和部署流程。

    11 天前
  • Promise.allSettled 的实现原理

    前言 Promise.all 和 Promise.race 是我们常用的两个 Promise 方法,但是自从 ECMAScript2019 引入了 Promise.allSettled,它也变得越来越...

    11 天前
  • Angular 中如何使用 OpenLayers 地图库进行地图应用开发

    简介 Angular 是一款流行的前端框架,其能更好地组织代码、管理依赖、提供丰富的扩展等优势,越来越多的工程师开始抛弃传统地图开发方式,将地图应用与 Angular 框架结合。

    11 天前
  • ES11 新特性:BigInt 精确数字类型

    在过去的 JavaScript 中,数字类型只能表示从 -2^53 到 2^53 范围内的整数,而对于更大的数字需使用第三方库进行处理。为了解决这个问题,ECMAScript 2020(也称为 ES1...

    11 天前
  • 利用 Enzyme 测试 React 组件的正确方式

    React 是一种流行的 JavaScript 库,可以帮助开发者构建复杂的 Web 应用程序。以 React 为例,它是一种基于组件的开发方式,组件是应用程序的构建快照,组件可以重复使用。

    11 天前
  • 如何使用 Headless CMS 构建在线教育平台的内容管理系统

    前言 在线教育平台是近年来蓬勃发展的行业之一,很多企业和机构都在开发和使用自己的在线教育平台。为了让教学内容能够更加有效地被传达,内容管理系统是必不可少的一部分。 传统的 CMS 存在一些问题,比如界...

    11 天前

相关推荐

    暂无文章