Express.js 中连接 MySQL 数据库的方法和最佳实践

介绍

在 Web 应用程序中,访问数据库是很常见的任务。而对于 Node.js 前端应用程序来说,使用 Express.js 连接 MySQL 数据库是一种常见的数据库访问方式。本文将介绍如何在 Express.js 中连接 MySQL 数据库,以及一些最佳实践来确保数据库访问安全和性能。

连接 MySQL 数据库

在 Express.js 中连接 MySQL 数据库,需要使用可用的 Node.js MySQL 客户端库。在本文中,我们将使用 mysql2 客户端库。在安装 mysql2 前,确保已经安装了 Node.js。

使用 npm 安装 mysql2:

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

一旦安装了 mysql2,使用以下代码连接到 MySQL 数据库:

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

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

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

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

在以上代码中,我们使用 createConnection 方法创建一个 MySQL 连接,并指定 MySQL 数据库的主机,用户名,密码和数据库名称。然后,我们使用 query 方法来执行 SQL 语句,并在回调函数中处理查询的结果。最后,我们在调用 end 方法来关闭连接。

最佳实践

1. 使用连接池

在生产环境中,应使用连接池来管理数据库连接。连接池可以减少连接创建和关闭的开销,并最大化利用数据库服务器的资源。在 Express.js 中,可以使用 mysql2 提供的连接池来连接到 MySQL 数据库。以下是连接池的示例代码:

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

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

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

在以上代码中,我们使用 createPool 方法创建一个连接池,并指定 MySQL 数据库的主机,用户名,密码和数据库名称。我们还可以使用 waitForConnections 参数指定是否等待连接可用,并使用 connectionLimit 参数来指定连接池的大小。此外,我们可以使用 queueLimit 参数指定等待连接的最大数量。

2. 使用预处理语句

使用预处理语句可以减少 SQL 注入攻击的风险,并提高数据库性能。在 Express.js 中,可以使用 mysql2 提供的 prepare 来执行预处理语句。以下是预处理语句的示例代码:

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

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

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

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

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

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

在以上代码中,我们使用预处理语句 SELECT * FROM users WHERE email = ? AND status = ?,并在 execute 方法中传递值参数 [john.doe@example.com, active]。最后,在回调函数中获取查询的结果。请注意,在 execute 方法中也可以使用占位符 ? 来代替值参数。

3. 善用索引

使用索引可以提高数据库查询的性能。在 Express.js 中,可以使用 mysql2 提供的 ALTER TABLECREATE INDEX 语句创建和修改索引。以下是使用索引的示例代码:

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

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

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

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

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

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

在以上代码中,我们使用 CREATE INDEX 语句创建名为 email_index 的索引,并在查询语句中使用 WHERE 条件语句 WHERE email = "john.doe@example.com"。请注意,这只是一种使用索引的示例,您应该在自己的项目中根据需求进行设置。

总结

在 Express.js 中连接 MySQL 数据库是一种常见的数据库访问方式。在编写代码时,我们应该遵循最佳实践,包括使用连接池管理数据库连接,使用预处理语句防止 SQL 注入攻击,以及善用索引提高数据库查询性能。本文介绍了如何在 Express.js 中连接 MySQL 数据库,并提供了示例代码以供参考。希望本文对您有所帮助。

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


猜你喜欢

  • Jest Mock:如何模拟 API 请求结果

    在前端开发中,测试是一个必不可少的环节。而在测试中,我们经常需要对于API请求进行一些测试,也常常会遇到API请求结果不确定的情况。因此,我们需要使用Jest Mock来模拟API请求结果,以便更好的...

    1 年前
  • 如何使用 Node.js 和 Express 构建 RESTful API

    随着前后端分离的开发模式越来越流行,建立 RESTful API 已经成为前端开发中必不可少的一部分。在这篇文章中,我们将会学习如何使用 Node.js 和 Express 框架来构建 RESTful...

    1 年前
  • 如何使用 Babel 编译 Angular 项目

    Angular 是一款流行的前端框架,可以帮助开发者快速构建高质量的 Web 应用程序。然而,Angular 使用的是最新的 ECMAScript 规范,而不是所有浏览器都能够支持的老版本。

    1 年前
  • TypeScript 中的类型推断及其局限性

    在前端开发中,静态类型检查一直是一个备受追捧的功能,这能够帮助开发者在开发过程中尽早发现代码中的类型错误。而 TypeScript 就是一种能够提供静态类型检查的工具。

    1 年前
  • 如何在 Express.js 中使用 Pug 模板引擎

    Pug 是一款强大的模板引擎,它可以将 HTML 模板转换为高度优化的 JavaScript 函数,从而在浏览器中渲染出 HTML 页面。在前端开发中,Pug 的使用非常普遍。

    1 年前
  • 从 ES6 到 ES8 的新特性总结

    在现代前端开发中,JavaScript 已经是不可或缺的技能之一。而 ECMAScript(简称 ES)规范定义了 JavaScript 的语法和行为,因此 ES 的新特性对于前端开发也具有重要的作用...

    1 年前
  • 如何在 Serverless 应用程序中使用 Redis 缓存

    什么是 Serverless? Serverless 是一种新兴的云计算架构,其特点是开发者不再需要关注物理服务器的管理与维护,而是将自己的代码运行在云服务供应商提供的函数计算环境中,只需按照业务需求...

    1 年前
  • SSE 遇到的坑及解决方案

    SSE 是什么? SSE(Server-Sent Events 服务器推送事件),是一种 HTML5 新增的推送技术,它可以让服务器实时向浏览器推送数据,也可以让浏览器实时向服务器发送数据。

    1 年前
  • Docker 部署 Apache ZooKeeper 集群及常见问题解决

    前言 Apache ZooKeeper 是一个分布式的开源应用程序协调服务,它是构建分布式系统的重要组件之一。与其他分布式服务不同,ZooKeeper 提供了一种高可用、高性能、强一致性、易于使用的集...

    1 年前
  • Next.js 移动端优化

    Next.js 是一款 React 框架,它能够帮助我们快速搭建 SSR(服务器渲染)和 SSR(静态站点生成)应用,并且还提供了一些移动端优化的手段。这篇文章将会详细介绍 Next.js 移动端优化...

    1 年前
  • 如何使用 Kubernetes 集群进行分布式任务调度?

    引言 在当今云计算时代,我们经常需要面对大规模的任务调度问题,例如: 需要处理大量数据的批处理任务 需要处理高并发请求的计算任务 需要实时响应的数据流处理任务 这些任务的共同点是,它们需要以分布式...

    1 年前
  • 在 Hapi 框架中使用 Inert 插件展示静态资源的实现

    Hapi 是一款 Node.js 的 Web 开发框架,其设计理念是由插件构建,通过不同的插件来实现不同的功能。Inert 就是一个用于在 Hapi 中展示静态资源的插件,通过它我们可以很方便地将静态...

    1 年前
  • 在 Web Components 中使用 Custom Elements 和 Shadow DOM 的区别

    Web Components 是一个用于创建可重用组件的规范。它由 Custom Elements、Shadow DOM 和 HTML Templates 三部分组成。

    1 年前
  • ES2020 可选链运算符

    ES2020 中增加了一项新的运算符可选链运算符 ?.,用于简化 JavaScript 中的空值判断。在过去,我们经常需要使用多个判断语句来确保变量或者属性不为 null 或 undefined。

    1 年前
  • Angular 服务的几种实现方式介绍

    什么是 Angular 服务 在 Angular 中,服务是一个可注入的类,用于共享数据和逻辑代码。它可以在多个组件之间共享数据、处理 HTTP 请求、管理应用状态等。

    1 年前
  • 使用 Fastify 中间件监视 HTTP 请求和响应

    在现代 Web 开发中,中间件是一项非常重要的技术。中间件允许您在处理 HTTP 请求和响应之前以及之后执行逻辑,这为我们提供了很多可能性,例如处理 Cookie、进行认证、压缩响应等。

    1 年前
  • 利用 ES12 中的 String.prototype.matchAll 方法解决正则表达式全局匹配问题

    正则表达式在前端开发中起到了非常重要的作用,它可以用来校验表单数据、解析 URL、提取 HTML 标签等等。但是在实际使用中,我们会遇到一个非常麻烦的问题:如何捕获全局匹配? 在过去,我们可以使用St...

    1 年前
  • Sequelize 中使用 ENUM 类型的技巧

    在 Sequelize 中,ENUM 是一种可以存储指定范围内允许的值的数据类型,它非常适合用来存储表示状态的数据。在本文中,我们将探讨 Sequelize 中使用 ENUM 类型的技巧,讨论 ENU...

    1 年前
  • 如何解决 Vue.js 中的事件传递问题及原理

    背景 在使用 Vue.js 开发 Web 应用时,我们经常会在组件间传递事件。但是,当组件嵌套层级比较深的时候,我们可能会遇到事件传递的问题,即某个组件发出的事件无法被父组件或者其他组件收到。

    1 年前
  • 使用 Mongoose 的 findOneAndUpdate 方法更新数据

    在前端开发中,经常需要对数据库中的数据进行更新操作。对于 MongoDB,我们可以使用 Mongoose 这个工具来进行操作,其中 findOneAndUpdate 方法能够方便地实现单个文档的更新操...

    1 年前

相关推荐

    暂无文章