【笔记】nodejs 封装mysql数据库连接

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录



一、连接数据库

const mysql = require("mysql");
const db_config={
    host:"localhost",
    user:"root",
    password:"root",
    port:"3306",
    database:"mydb" 
}
let conn = mysql.createConnection(db_config);

// 连接数据库
conn.connect(err => {
    if(err) {
        throw err
    } else{
        console.log("连接成功!");
    }
})

// 查询数据库
conn.query("select * from user", (err, res) => {
    if(err){
        throw err
    }else{
        console.log(res);
        closeMysql(conn);
    }
});

// 关闭数据库
let closeMysql = conn => {
    conn.end(err => {
        if(err){
        	throw err
        }else{
            console.log('关闭成功!');
        }
	});
}

运行中若遇到如下报错请检查输入信息是否正确host、port、user、password 等jdbc配置中拿到的相关信息尤其是密码很可能是加密后的

Error: ER_ACCESS_DENIED_ERROR: Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  • host主机地址 默认localhost
  • user用户名
  • password密码
  • port端口号 默认3306
  • database数据库名
  • charset连接字符集默认‘UTF8_GENERAL_CI’注意字符集的字母都要大写
  • localAddress此IP用于TCP连接可选
  • socketPath连接到unix域路径当使用 host 和port 时会被忽略
  • timezone时区默认‘local’
  • connectTimeout连接超时默认不限制单位毫秒
  • stringifyObjects是否序列化对象默认‘false’ 与安全相关
  • typeCast是否将列值转化为本地JavaScript类型值 默认true
  • queryFormat自定义query语句格式化方法
  • supportBigNumbers数据库支持bigint或decimal类型列时需要设此option为true 默认false
  • bigNumberStringssupportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回默认false
  • dateStrings强制timestamp,datetime,data类型以字符串类型返回而不是JavaScriptDate类型默认false
  • debug开启调试默认false
  • multipleStatements是否许一个query中有多个MySQL语句 默认false
  • flags用于修改连接标志
  • ssl使用ssl参数与 crypto.createCredenitals 参数格式一至或一个包含ssl配置文件名称的字符串目前只捆绑 Amazon RDS 的配置文件

二、数据池保持连接 & 公共方法封装

数据库连接池 pool 可以有效避免频繁连接、断开导致的资源消耗

1.封装

const mysql = require('mysql')

const db_config = {
	host:"localhost",
	user:"root",
	password:"root",
	port:"3306",
	database:"mydb" 
}

let sqlConnTemp = (sql, params) => {
  return new Promise((resolve, reject) => {
    let conn = mysql.createConnection(db_config)
    let closeMysql = conn => conn.end(err => if(err) throw err )
    conn.connect((err, conn) => {
      err ? reject(err) : conn.query(sql, params, (err, data, fields) => {
        err ? reject(err) : resolve(data)
      })
      closeMysql(conn);
    })
  })
}

let sqlConn = (sql, params) => {
  return new Promise((resolve, reject) => {
  	// 连接池保持连接
    const pool = mysql.createPool(db_config)
    pool.getConnection((err, conn)=>{
        err ? reject(err) : conn.query(sql, params, (err, data, fields) => {
	        err ? reject(err) : resolve(data)
      	})
      	conn.release() // 仅释放未关闭
      	// pool.end() // 关闭连接
    })
  })
}

module.exports = { sqlConnsqlConnTemp }

2.调用

const { sqlConn }= require('./mysql')

sqlConn('select * from user_table where age = ? and sex = ?',[21, 1]).then((data) => {
    console.log(data)
    res.send(data)
}).catch((err) => {
    console.error(err)
    res.send(err)
})

若是担心网络问题造成连接失败可以在连接reject部分添加定时并回调连接


未完待续。。。欢迎留言一起学习探讨


拓展阅读

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6