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 相关文章推荐
设置下载不需要倒计时cookie(倒计时代码)
Nov 19 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
Jun 20 Javascript
seaJs的模块定义和模块加载浅析
Jun 06 Javascript
js实现图片在未加载完成前显示加载中字样
Sep 03 Javascript
基于jQuery实现网页打印功能
Dec 01 Javascript
javascript多物体运动实现方法分析
Jan 08 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
Jun 14 Javascript
Bootstrap字体图标无法正常显示的解决方法
Oct 08 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
Dec 19 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
Mar 02 Javascript
Javascript获取某个月的天数
May 30 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
Feb 20 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访问查询mysql数据的三种方法
2006/10/09 PHP
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
python开根号实例讲解
2020/08/30 Python
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
县委务虚会发言材料
2014/10/20 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
上班迟到检讨书
2015/05/06 职场文书
领导新年致辞2016
2015/07/29 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
学校就业保障协议书
2019/06/24 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
使用JS实现简易计算器
2021/06/14 Javascript
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
Python+Appium自动化测试的实战
2021/06/30 Python
浅析JavaScript中的变量提升
2022/06/01 Javascript