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 相关文章推荐
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
Jan 05 Javascript
详解JavaScript对W3C DOM模版的支持情况
Jun 16 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
Nov 04 Javascript
js实现带农历和八字等信息的日历特效
May 16 Javascript
JS实现鼠标框选效果完整实例
Jun 20 Javascript
JavaScript检测原始值、引用值、属性
Jun 20 Javascript
浅谈js的html元素的父节点,子节点
Aug 06 Javascript
javascript判断回文数详解及实现代码
Feb 03 Javascript
React/Redux应用使用Async/Await的方法
Nov 16 Javascript
js传递数组参数到后台controller的方法
Mar 29 Javascript
js设计模式之单例模式原理与用法详解
Aug 15 Javascript
如何在微信小程序中使用骨架屏的步骤
Jun 12 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初学者头疼问题总结
2006/10/09 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
PHP获取url的函数代码
2011/08/02 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
php二维数组排序详解
2013/11/06 PHP
15 个 JavaScript Web UI 库
2010/05/19 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
python中实现php的var_dump函数功能
2015/01/21 Python
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
使用python实现tcp自动重连
2017/07/02 Python
python实现网站微信登录的示例代码
2019/09/18 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
Java基础知识面试题
2014/03/25 面试题
十岁生日家长答谢词
2014/01/17 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
收入证明范本
2015/06/12 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis