【笔记】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部分添加定时并回调连接
未完待续。。。欢迎留言一起学习探讨
拓展阅读