nodejs之mysql的事务封装
简介
本文章主要针对nodejs中MySQL模块下事务的封装,利用es6新特性中的class类的封装,让事务更加容易调用和使用。(主要因为网上能查到的好多都是简单的事务使用,但是在真实项目中需要再次加工,所以这里是我稍微加工后,够目前项目使用的结构,如果您感觉冗余性还是很高,欢迎你们再次加工?)。
所需模块
目前MySQL模块是使用回调函数的形式来接受返回的数据,这样无疑会导致多种嵌套的使用,所以我们利用bluebird模块进行加工变成promise,来美观代码:
- mysql :V2.16.0;
- bluebird:V^3.5.2;
文件结构
- config:mysql.json(MySQL的连接参数)
- db:mysql.js(包含mysql的配置与连接池)
- model:OrderModel.js(此次拿订单做比喻)
干货部分
话不多少,只有代码才能说明一切。
1 此部分为mysql初始化配置信息:
// config文件下的mysql.json
{
"host":"xx.xxx.xxx.xx",
"user":"root",
"password":"root",
"database":"shop"
}
2 数据库连接
//db文件下的mysql.js
var mysqlConfig=require('../config/mysql');
var db = {
};
var mysql = require('mysql');
var bluebird=require('bluebird');
var pool = mysql.createPool(mysqlConfig);
let getConnection=bluebird.promisify(pool.getConnection,{
context:pool});//将原getConnection回调函数变为promise函数
//将连接池的连接return出去
async function getconnection(){
let result=await getConnection();
return new Promise(function (resolve,reject) {
resolve(result);
})
}
module.exports=async function(){
return await getconnection();
}
3 orderModel的封装和对数据库的使用
var Connection = require('../db/newmysql');
var bluebird=require('bluebird');
const utils=require('../utils/index')();
const logger=utils.logger;
class Order{
constructor(){
this.oid=0;
this.onumber="";//订单编号
this.oaccount=0.0;//订单金额
this.recipient="";//收件人
this.phone="";
this.express="";
this.ordertime="";
this.paytime="";
this.state=0;