Node.js使用MySQL连接池的方法实例

yizhihongxing

下面是详细的讲解“Node.js使用MySQL连接池的方法实例”的攻略。

准备工作

在使用Node.js连接MySQL数据库之前,需要先安装Node.js和MySQL Server。此外,还需要安装MySQL Node.js驱动程序,可以通过npm命令安装:

npm install mysql

连接池的概念

连接池是一种连接数据库的方式。连接池本质上是一组数据库连接,它们可以被多个客户端共享。连接池的任务是管理连接,将它们提供给客户端。当客户端使用完连接之后,它将被返回到连接池中,以便其他客户端重复使用。连接池可以提高应用程序的性能、可扩展性和可靠性。

下面是一个使用连接池的示例:

const mysql = require('mysql');
const pool = mysql.createPool({
  connectionLimit : 10,
  host            : 'localhost',
  user            : 'root',
  password        : 'mypassword',
  database        : 'mydatabase',
  multipleStatements: true
});

pool.getConnection(function(err, connection) {
  if (err) throw err; // not connected!
  console.log('Connected!');
  connection.release();
});

在这个示例中,首先使用mysql.createPool()方法创建一个连接池。连接池选项包括连接限制、主机名、用户名、密码、数据库名等。之后,调用pool.getConnection()方法从连接池中获取一个数据库连接。如果获取连接时发生错误,则会抛出异常。如果成功获取连接,则可以使用该连接执行数据库查询操作。在查询完成后,需要调用connection.release()方法将连接返回到连接池中,以便其他客户端可以使用该连接。

实例一:查询数据并返回结果

下面是一个示例,演示如何使用Node.js连接池从MySQL中查询数据并返回结果。在这个示例中,假设数据库中包含一个名为customers的表。

const mysql = require('mysql');
const pool = mysql.createPool({
  connectionLimit : 10,
  host            : 'localhost',
  user            : 'root',
  password        : 'mypassword',
  database        : 'mydatabase',
  multipleStatements: true
});

const query = (sql, values) => {
   return new Promise((resolve, reject) => {
      pool.getConnection((err, connection) => {
         if (err) {
            return reject(err);
         }
         connection.query(sql, values, (error, results, fields) => {
            connection.release();
            if (error) {
               return reject(error);
            }
            return resolve(results);
         });
      });
   });
};

(async () => {
  try {
    const results = await query('SELECT * FROM customers');
    console.log('Results:', results);
  } catch (error) {
    console.error('Error:', error);
  }
})();

在这个示例中,定义了一个query()函数,该函数将要执行的SQL语句和参数传递给连接池。使用Promise封装的方式异步处理返回结果。如果查询成功,则返回查询结果;如果出现错误,则抛出异常。

实例二:事务处理

下面是一个示例,演示如何使用Node.js连接池执行事务处理操作。在这个示例中,假设数据库中包含一个名为accounts的表。

const mysql = require('mysql');
const pool = mysql.createPool({
  connectionLimit : 10,
  host            : 'localhost',
  user            : 'root',
  password        : 'mypassword',
  database        : 'mydatabase',
  multipleStatements: true
});

const transaction = async () => {
   const connection = await new Promise((resolve, reject) => {
      pool.getConnection((err, connection) => {
         if (err) {
            return reject(err);
         }
         return resolve(connection);
      });
   });
   try {
      await new Promise((resolve, reject) => {
         connection.beginTransaction(error => {
            if (error) {
               return reject(error);
            }
            return resolve();
         });
      });

      await new Promise((resolve, reject) => {
         connection.query('UPDATE accounts SET balance = balance - 100 WHERE id = 1', (error, results, fields) => {
            if (error) {
               return reject(error);
            }
            return resolve();
         });
      });

      await new Promise((resolve, reject) => {
         connection.query('UPDATE accounts SET balance = balance + 100 WHERE id = 2', (error, results, fields) => {
            if (error) {
               return reject(error);
            }
            return resolve();
         });
      });

      await new Promise((resolve, reject) => {
         connection.commit(error => {
            if (error) {
               return reject(error);
            }
            return resolve();
         });
      });
   } catch (error) {
      await new Promise((resolve, reject) => {
         connection.rollback(() => {
            return resolve();
         });
      });
      throw error;
   } finally {
      connection.release();
   }
};

(async () => {
  try {
    await transaction();
    console.log('Transaction completed');
  } catch (error) {
    console.error('Transaction failed', error);
  }
})();

在这个示例中,定义了一个transaction()函数,该函数使用连接池执行事务处理操作。在事务中,首先使用connection.beginTransaction()方法开始事务处理;之后,依次执行两个SQL语句。如果执行出现错误,则使用connection.rollback()方法撤销事务处理;否则,使用connection.commit()方法提交事务处理结果。在无论事务成功、失败、或出现错误的情况下,都需要使用connection.release()方法将连接返回到连接池中,以便其他客户端可以使用该连接。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js使用MySQL连接池的方法实例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • vue-cli构建vue项目的步骤详解

    下面我就为您详细讲解“vue-cli构建vue项目的步骤详解”的攻略。 步骤一:安装Node.js 要安装Vue CLI,首先需要安装Node.js。可以从官方网站 https://nodejs.org/zh-cn/ 上下载安装。 步骤二:安装Vue CLI 使用npm全局安装Vue CLI: npm install -g @vue/cli 如果您已经安装了…

    node js 2023年6月8日
    00
  • Nodejs 获取时间加手机标识的32位标识实现代码

    一. 概述 在 Node.js 中,我们可以使用 crypto 模块的 createHash() 方法,将一个字符串转成 MD5 编码的32位标识。而我们可以将手机的IMEI或者序列号和时间戳进行拼接,生成一个带时间和手机标识的32位唯一标识。 二. 实现步骤 安装 crypto 模块 npm install crypto –save 引入 crypto …

    node js 2023年6月8日
    00
  • 详解Nodejs get获取远程服务器接口数据

    下面我会详细讲解如何使用Node.js获取远程服务器接口数据。 什么是Node.js Node.js是一个基于Chrome V8 JavaScript引擎的开源、跨平台的JavaScript运行环境,用于构建服务器端应用程序。使用Node.js可以实现高效、稳定、可扩展的后端服务及应用。 HTTP模块 Node.js内置的HTTP模块可以用于创建Web服务器…

    node js 2023年6月8日
    00
  • Express实现Session身份认证的示例代码

    下面我将详细讲解“Express实现Session身份认证的示例代码”的攻略过程。实现Session身份认证需要以下几个步骤: 步骤一:安装依赖 首先,我们需要安装express和express-session两个依赖: npm install express express-session 步骤二:配置session 配置session需要使用expres…

    node js 2023年6月8日
    00
  • docker打包node项目的过程讲解

    当我们需要将一个基于Node.js开发的应用部署到服务器上时,我们通常需要进行一些环境配置和部署操作。而Docker,则可以将这些操作自动化,并将应用及其依赖打包成一个镜像,方便部署和管理。下面是一份Docker打包Node.js项目的攻略,步骤如下: 第一步:准备Docker环境 在进行Docker打包Node.js项目之前,你需要先安装好Docker。如…

    node js 2023年6月8日
    00
  • nodejs搭建本地服务器并访问文件操作示例

    下面是详细的攻略。 简介 Node.js 是一个基于 Chrome V8 JavaScript 引擎构建的 JavaScript 运行时环境,使 JavaScript 可以脱离浏览器运行于服务器端。它的出现使得 JavaScript 不再局限于浏览器,可以利用它进行服务器端的操作。本攻略将介绍如何利用 Node.js 搭建本地服务器并进行文件操作。 服务端搭…

    node js 2023年6月8日
    00
  • 防止Node.js中错误导致进程阻塞的办法

    当使用Node.js开发Web应用或服务器时,难免会遇到各种错误导致进程阻塞的情况,例如同步I/O、死循环、大量计算等。为了避免这些问题,以下是几种防止Node.js中错误导致进程阻塞的办法: 1. 使用异步操作 Node.js运行在单线程上,如果使用同步I/O操作,会导致进程阻塞。因此,可以使用异步操作,例如使用setTimeout()或setInterv…

    node js 2023年6月8日
    00
  • 浅谈node使用jwt生成的token应该存在哪里

    当使用 Node.js 程序生成 JSON Web Token (JWT) 时,您需要决定如何存储生成的 token。根据您的具体情况和需求,您可以将 jwt 存储在 cookies、localStorage 中,或者作为 Authorization 头在 HTTP 请求中发送。 以下是三种存储 jwt 的方式: 存储在Cookie中 当您将 Token 存…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部