封装nodejs连接mysql数据库的方法

封装nodejs连接mysql数据库的方法

完整代码在最后

1.创建数据库

1.1创建一个数据库
create database my_database;
1.2选择数据库
use my_database;
1.3创建数据表
create table student(id int,name char(10));
1.4插入数据项
insert into student(id,name,age,sex,high) value (001,"张三",10,"男",160);

2.初始化文件

2.1用Visual Studio Code 导航到创建的新文件,使用一下命令创建一个package.json 文件
npm init -y
2.2然后,使用一下安装mysql 模块
npm install mysql

3.创建一个dbconfig.js 文件

3.1导入mysql模块
const mysql = require("mysql")
3.2创建连接池,根据情况填写host等信息
const pool = mysql.createPool({
  host: "localhost",
  user: "root",
  password: "密码",
  database: "my_database",
});

使用mysql.createConnection()方法创建了一个数据库连接对象,并指定了连接所需的参数,包括:

  • host: 数据库服务器地址,这里是本地地址localhost
  • user: 用于连接数据库的用户名
  • password: 用户的密码
  • database: 要连接的数据库名
3.3封装 sqlConnect方法
module.exports = {
//封装了sqlConnect方法,并通过module.exports导出
  sqlConnect: function (sql, params) {
    //定义了一个名为sqlConnect的方法,它接受两个参数:sql(代表SQL语句)和params(代表SQL语句中所需的参数数组
    return new Promise((resolve, reject) => {
    //sqlConnect方法返回一个Promise对象。Promise是JavaScript中用于处理异步操作的对象,它提供了resolve和reject两个方法,分别表示异步操作成功和失败时的回调函数。
      pool.getConnection((err, connection) => {
      //试从pool(数据库连接池)中获取一个连接。当连接成功或失败时,会执行提供的回调函数,并传入err(如果有错误的话)和connection(连接对象)。
        if (err) {
          console.log("err", "连接失败");
          reject(err);
          return;
            //如果在获取连接时发生错误,代码将输出错误消息到控制台,并通过Promise的reject方法将错误返回给调用者。然后,通过return语句退出当前回调函数。
        }
        connection.query(sql, params, (err, results) => {
          if (err) {
            console.log("err", "查询失败");
            reject(err);
            return;
          }
          resolve(results);
          //如果SQL查询成功执行,代码将调用Promise的resolve方法,并将查询结果results作为参数传入。这意味着Promise的then方法将能够接收到这些结果。
          connection.release();
            //在成功处理完查询后,代码释放了与数据库的连接,使其可以返回到连接池中供其他查询使用
        });
      });
    });
  },
};

4.创建 index.js 文件

4.1使用了Node.js的require方法,用于导入一个名为dbconfig的模块,该模块位于./utils/目录下。
const dbconfig = require("./utils/dbconfig");
4.2定义了一个常量sql,它包含了一个SQL查询语句,该语句从user表中选取所有列的所有行。
const sql = "select * from user";
4.3调用dbconfig模块中的sqlConnect方法
dbconfig.sqlConnect(sql, [])
  .then((res) => {
    console.log("res", res);
  })
  .catch((err) => {
    console.error("Error executing SQL:", err);
  });
  • 调用dbconfig模块中的sqlConnect方法,并传入之前定义的SQL查询语句sql和一个空数组(这个数组可能是用于传递查询参数的,但在此例中它是空的)。
  • sqlConnect方法应该返回一个Promise对象,该对象在成功执行SQL查询时解析(resolve)为查询结果,在出现错误时拒绝(reject)并抛出一个错误。
  • 使用.then().catch()方法来处理Promise的解析和拒绝。如果查询成功,控制台将打印出查询结果;如果查询失败,控制台将打印出错误信息。
4.4最后在文件中打开终端输入
node index.js
4.5控制台输出你的数据库数据
{ id: 1, name: '张三' }

5 完整代码

5.1 dbconfig.js 完整代码
//导入mysql模块
const mysql = require("mysql");
//创建连接池 根据实际情况填写host等信息
const pool = mysql.createPool({
  host: "localhost",
  user: "root",
  password: "密码",
  database: "my",
});

//封装了sqlConnect方法,并通过module.exports导出
module.exports = {
  sqlConnect: function (sql, params) {
    //返回一个Promise对象
    return new Promise((resolve, reject) => {
    //pool.getConnection是否和数据库建立了连接
      pool.getConnection((err, connection) => {
        if (err) {
        //连接失败将异常抛出
          console.log("err", "连接失败");
          reject(err);
          return;
        }
        //连接成功执行connection.query方法,该方法是执行sql语句
        //需要传入三个参数,第一个参数是sql语句,第二个参数sql语句中需要的值以数组的形式
        //第三个参数是回调函数,如果执行sql语句成功,返回results,执行失败返回err
        connection.query(sql, params, (err, results) => {
          if (err) {
            console.log("err", "查询失败");
            reject(err);
            return;
          }
          resolve(results);
          //与数据库断开连接
          connection.release();
        });
      });
    });
  },
};
5.2 index.js 完整代码
//引入该方法所在的js文件的路径
const dbconfig = require("./utils/dbconfig"); 

const sql = "select * from user";

dbconfig.sqlConnect(sql, [])
  .then((res) => {
    console.log("res", res);
  })
  .catch((err) => {
    console.error("Error executing SQL:", err);
  });
  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值