node基于async/await对mysql进行封装


Posted in Javascript onJune 20, 2019

前言

node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果。但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一次操作封装,让查询更加方便。(node版本需>=7.0)。

原理

简单来说,async/await的实现原理是基于promise,根据promise的状态来判断是否真正返回,因此我们可以在mysql真正查询到结果后将promise状态切换为resolve,返回结果。如出现错误通过reject返回错误信息,reject需要用try/catch进行捕获。

代码

'use strict';
const mysql = require( 'mysql' );
var pool = mysql.createPool( {
  connectionLimit : 50,
  host      : '',
  user      : '',
  password  : '',
  database   : '',
  multipleStatements : true //是否允许执行多条sql语句
} );
//将结果已对象数组返回
var row=( sql , ...params )=>{
  return new Promise(function(resolve,reject){
    pool.getConnection(function(err,connection){
      if(err){
        reject(err);
        return; 
      }
      connection.query( sql , params , function(error,res){
        connection.release();
        if(error){
          reject(error);
          return;
        }
        resolve(res);
      });
    });
  });
};
//返回一个对象
var first=( sql , ...params )=>{
  return new Promise(function(resolve,reject){
    pool.getConnection(function(err,connection){
      if(err){
        reject(err);
        return; 
      }
      connection.query( sql , params , function(error,res){
        connection.release();
        if(error){
          reject(error);
          return;
        }
        resolve( res[0] || null );
      });
    });
  });
};
//返回单个查询结果
var single=(sql , ...params )=>{
  return new Promise(function(resolve,reject){
    pool.getConnection(function(err,connection){
      if(err){
        reject(err);
        return; 
      }
      connection.query( sql , params , function(error,res){
        connection.release();
        if(error){
          reject( error );
          return;
        }
        for( let i in res[0] )
        {
          resolve( res[0][i] || null );
          return;
        }
        resolve(null);
      });
    });
  });
}
//执行代码,返回执行结果
var execute=(sql , ...params )=>{
  return new Promise(function(resolve,reject){
    pool.getConnection(function(err,connection){
      if(err){
        reject(err);
        return; 
      }
      connection.query( sql , params , function(error,res){
        connection.release();
        if(error){
          reject(error);
          return;
        }
        resolve( res );
      });
    });
  });
}

//模块导出
module.exports = {
  ROW   : row ,
  FIRST  : first ,
  SINGLE : single ,
  EXECUTE : execute 
}

使用示例

const mysql = require('./mysql.js');
(async ()=>{
let s = await mysql.row(sql,params);
console.log(s);
})();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
可以支持多中格式的JS键盘
May 02 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
Aug 28 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
Dec 13 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
Jan 26 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
Nov 07 Javascript
基本DOM节点操作
Jan 17 Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 Javascript
JS实现的JSON数组去重算法示例
Apr 11 Javascript
JavaScript作用域链实例详解
Jan 21 Javascript
一文了解Vue中的nextTick
May 06 Javascript
微信小程序实用代码段(收藏版)
Dec 17 Javascript
用vue写一个日历
Nov 02 Javascript
JavaScrip数组去重操作实例小结
Jun 20 #Javascript
Vue 动态添加路由及生成菜单的方法示例
Jun 20 #Javascript
JavaScript命名空间模式实例详解
Jun 20 #Javascript
npm的lock机制解析
Jun 20 #Javascript
express如何解决ajax跨域访问session失效问题详解
Jun 20 #Javascript
JS去除字符串最后的逗号实例分析【四种方法】
Jun 20 #Javascript
如何在微信小程序中实现Mixins方案
Jun 20 #Javascript
You might like
克隆一个新项目的快捷方式
2013/04/10 PHP
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
PHP的PSR规范中文版
2013/09/28 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
php和html的区别点详细总结
2019/09/24 PHP
过虑特殊字符输入的js代码
2010/08/05 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
node使用request请求的方法
2019/12/20 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
Python 解析XML文件
2009/04/15 Python
使用python分析git log日志示例
2014/02/27 Python
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
印尼网上商店:Alfacart.com
2019/03/11 全球购物
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
九年级历史教学反思
2014/01/27 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
无房证明范本
2014/09/17 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
修辞手法有哪些?
2019/08/29 职场文书