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对象所有属性和方法的函数
Oct 16 Javascript
Jquery attr("checked") 返回checked或undefined 获取选中失效
Oct 10 Javascript
教你在heroku云平台上部署Node.js应用
Jul 30 Javascript
js 动态修改css文件用到了cssRule
Aug 20 Javascript
javascript元素动态创建实现方法
May 13 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
May 04 jQuery
Node.js系列之发起get/post请求(2)
Aug 30 Javascript
JavaScript 类的封装操作示例详解
May 16 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
Nov 24 Javascript
Node.js中的异步生成器与异步迭代详解
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中的strpos使用示例
2014/02/27 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
javascript 写类方式之四
2009/07/05 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
c++生成dll使用python调用dll的方法
2014/01/20 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
编程实现去掉XML的重复结点
2014/05/28 面试题
师范大学音乐表演专业求职信
2013/10/23 职场文书
分公司经理岗位职责
2013/11/11 职场文书
给交警的表扬信
2014/01/12 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
市场营销调查计划书
2014/05/02 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
年度考核表个人总结
2015/03/06 职场文书
2015年统战工作总结
2015/05/19 职场文书
开学典礼致辞
2015/07/29 职场文书
运输公司工作总结
2015/08/11 职场文书
Python与C++中梯度方向直方图的实现
2022/03/17 Python