本文js代码采取了ES6/ES7的写法,而不是commonJs的写法。支持一波JS的新语法。
node版本的mysql驱动,通过npm i mysql安装。官网地址:
https://github.com/mysqljs/mysql
我们使用了连接池(为什么要使用连接池?性能啊),官网上说明有2种连接池的使用方式:
pool.query()
pool.getConnection();
区别是什么,网上的说法:大部分时间用 pool.query 就行了,当有些操作需要保证是同一 connection 的时候,就独立使用 pool.getConnection。
我们选择pool.getConnection()的方式。代码的组织方式:
说明:
config下的index.js是mysql的配置文件:数据库地址,账户,密码等:
// MySQL数据库联接配置
export default {
mysql: {
host: '127.0.0.1',
user: 'root',
password: 'root',
database:'test', // 前面建的user表位于这个数据库中
port: 8889
}
};
dao下有个base文件夹,这里是我们的封装mysql链接,执行sql的地方。base/pool.js是创建一个连接池,写法固定:
import mysql from 'mysql';
import $conf from '../../config/db.js';
let pool = mysql.createPool($conf.mysql);
export default pool;
1.回调的方式:
base/index.js使我们对执行sql的一个封装。如果用回调的方式:
import pool from './pool';
export default function(query,params,callback){
pool.getConnection(function(err,connection){
if (err) {
connection.release();
throw err;
}
connection.query(query,params,function(err,rows){
connection.release();
if(!err) {
callback(null, {rows: rows});
}
});
connection.on('error', function(err) {
throw err;
});
});
}
回调写法使用很简单,就不举例了
2.Promise then的方式:
我们对base/index.js改造,ES6 Promise then的方式:
import pool from './pool';
function executeQuery(query,params){
return new Promise(function (resolve,reject){
pool.getConnection(function(err,connection){
if (err) {
connection.release();
reject(err);
}
connection.query(query,params,function(err,rows,fields){
connection.release();
if(err) {
reject(err);
}else{
resolve(rows);
}
});
// connection.on('error', function(err) {
// reject(err);
// });
});
});
}
export default executeQuery;
我们采用Promise的写法。我们使用base文件夹里的封装,写一个具体的sql查询,结果处理。
user/index.js用then的方式:
import mohair from 'mohair';
import executeQuery from '../base/index';
let userDao = {
getAll: function (req, res, next) {
let param = req.query || req.params;
let userQuery =mohair.table('user').select('*');
executeQuery(userQuery.sql(),userQuery.params()).then((rows)=>{
res.json({
code:'200',
data:rows
})
}).catch((err)=>{
console.log(err);
res.json({
code:'500',
data:'出错了'
})
});
};
export default userDao;
3.Async/Await:
采用es7的Async/Await,base/index.js不变,还是返回一个Promise。
import mohair from 'mohair';
import executeQuery from '../base/index';
let userDao = {
getAll:async function(req,res,next){
let param = req.query || req.params;
let userQuery =mohair.table('user').select('*');
try{
let result = await executeQuery(userQuery.sql(),userQuery.params())
res.json({
code:'200',
data:result
})
}catch(err){
res.json({
code:'500',
data:err
})
}
},
};
export default userDao;
至此我们已经完成了整个封装,base/index.js里返回一个Promise,在我们调用的时候用Async/Await方式
看效果: