node mysql es6/es7改造

來源:互聯網
上載者:User

標籤: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改造

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.