node mysql es6/es7改造
Posted 小虫虫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node mysql es6/es7改造相关的知识,希望对你有一定的参考价值。
本文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方式
看效果:
以上是关于node mysql es6/es7改造的主要内容,如果未能解决你的问题,请参考以下文章