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 相关文章推荐
jQuery html()等方法介绍
Nov 18 Javascript
jquery 锁定弹出层实现代码
Feb 23 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
Jun 06 Javascript
jQuery使用之设置元素样式用法实例
Jan 19 Javascript
3个可以改善用户体验的AngularJS指令介绍
Jun 18 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
Sep 06 Javascript
基于javascript实现根据身份证号码识别性别和年龄
Jan 22 Javascript
Vue filter介绍及其使用详解
Oct 21 Javascript
Vue组件中prop属性使用说明实例代码详解
May 31 Javascript
JavaScript fetch接口案例解析
Aug 30 Javascript
微信小程序实现打卡日历功能
Sep 21 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 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
php 的反射详解及示例代码
2016/08/25 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
Javasript设计模式之链式调用详解
2018/04/26 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
用python 制作图片转pdf工具
2015/01/30 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Python中turtle库的使用实例
2019/09/09 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
广告学专业毕业生自荐信
2014/05/28 职场文书
停电放假通知
2015/04/14 职场文书
文员岗位职责范本
2015/04/16 职场文书
趣味运动会口号
2015/12/24 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
python 对图片进行简单的处理
2021/06/23 Python
深入浅析Django MTV模式
2021/09/04 Python
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL