一、先安装mysql中间件
npm i mysql --save
二、config.json配置库文件
{
"host": "localhost",
"port": "3306",
"user": "root",
"password": "root",
"database": "xiaou"
}
三、封装mysql连接库
const mysql = require('mysql'); //导入mysql中间件
const to = require('../utils/async_to');
const fs = require('fs');
const path = require('path');
class DB {
constructor({
host = 'localhost', //主机名或id地址
port = '3306', //端口号
user = 'root', //用户名
password = 'root', //密码
database = 'xiaou' //数据库名
} = {}) {
this.conn = null;
this.config = {
host,
port,
user,
password,
database
};
};
//1.建立连接
connect() {
//创建服务器连接,将连接对象,赋值给conn
this.conn = mysql.createConnection(this.config);
return new Promise((resolve, reject) => {
//建立连接
this.conn.connect(err => {
err ? reject(err) : resolve();
});
});
};
//2.对数据库的操作
async query(sql, params = []) {
//每次执行query都会创建一个新的连接
let [err, data] = await to(this.connect());
if (err) throw err; //如果发生错误将会抛出
return new Promise((resolve, reject) => {
this.conn.query(sql, params, (err, data) => {
err ? reject(err) : resolve(data);
});
});
};
//3.关闭连接
close() {
this.conn.end();
};
}
// 读取配置文件信息
let buf = fs.readFileSync(path.join(__dirname, 'config.json'));
//导出DB对象的实例
module.exports = new DB(JSON.parse(buf.toString()));
上面库需要搭配async_to使用
let to = (promise) => {
return promise
.then(data => [null, data])
.catch(err => [err, null]);
};
module.exports = to;
四、使用方法
因为封装的时候使用了async,所以使用的使用注意搭配async和await使用
const db = require('../db');
const to = require('../../utils/async_to');
register();
//注册业务
let register = async(req, res) => {
let result = await existUser(username);
if (result.length > 0) {
res.send(myError('该用户已经存在'));
return;
}
}
//判断用户是否存在
async function existUser(username) {
//具体使用db.query
let [err, data] = await to(db.query("SELECT member.username FROM member WHERE username=?", username));
return err ? err : data;
};