標籤:resolve 固定 exec 寫法 cut ret 需要 user catch
本文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;
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; }); });}
我們對base/index.js改造,ES6 Promise的方式:
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;
採用es7的Async/Await:
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改造