博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node mysql es6/es7改造
阅读量:7060 次
发布时间:2019-06-28

本文共 3309 字,大约阅读时间需要 11 分钟。

本文js代码采取了ES6/ES7的写法,而不是commonJs的写法。支持一波JS的新语法。 node版本的mysql驱动,通过npm i mysql安装。官网地址: https://github.com/mysqljs/mysql 我们使用了连接池(为什么要使用连接池?性能啊),官网上说明有2种连接池的使用方式: pool.query() 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方式
看效果:

 

 
 

转载于:https://www.cnblogs.com/xiaochongchong/p/8881603.html

你可能感兴趣的文章
table size script :
查看>>
RTC终于tm的通了
查看>>
在Silverlight中如何创建WCF Service
查看>>
Android 下的 USB HID 设备读写
查看>>
CSV文件转JSON
查看>>
Android Context类
查看>>
ztree 根据id选中某一点且触发当前点的click事件
查看>>
10.16复习 数位DP——不要62
查看>>
input checkbox复选框点击获取当前选中状态jquery
查看>>
Git 安装与简单使用(新手必看)
查看>>
leetcode-143. Reorder List
查看>>
怎样解决if __name__ == "__main__":下面的代码没有执行的问题
查看>>
python从入门到实践-6章字典
查看>>
glusterfs 步骤
查看>>
浅谈gibbs sampling(LDA实验)
查看>>
Asp.net 后台添加CSS、JS、Meta标签
查看>>
JDBC连接SQL Server2008基本格式及示例代码 (转载收藏~)
查看>>
以前的GHOST系统没落,现在 原版WINDOWS更新节奏还快 MSDN itellyou
查看>>
scala学习手记21 - 传递变长参数
查看>>
一些JavaScript中的DOM的优化小技巧
查看>>