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代码
Mar 27 Javascript
js调用后台servlet方法实例
Jun 09 Javascript
原始的js代码和jquery对比体会
Sep 10 Javascript
Javascript字符串对象的常用方法简明版
Jun 26 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
Jul 22 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
Nov 22 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 Javascript
vue vant Area组件使用详解
Dec 09 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 Javascript
JavaScript中的各种宽高属性的实现
May 08 Javascript
Javascript生成器(Generator)的介绍与使用
Jan 31 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中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
javascript实现数独解法
2015/03/14 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
Python 去除字符串中指定字符串
2020/03/05 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
python 安装移动复制第三方库操作
2020/07/13 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
自我评价范文分享
2014/01/04 职场文书
学生实习介绍信
2014/01/15 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
工厂见习报告范文
2014/10/31 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
人民调解协议书
2016/03/21 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
mysql 获取时间方式
2022/03/20 MySQL