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查找法实现当前栏目的高亮显示的代码
Nov 24 Javascript
JavaScript 字符串处理函数使用小结
Dec 02 Javascript
JavaScript中setMonth()方法的使用详解
Jun 11 Javascript
JS对HTML表格进行增删改操作
Aug 22 Javascript
再谈javascript注入 黑客必备!
Sep 14 Javascript
使用nvm管理不同版本的node与npm的方法
Oct 31 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
Feb 10 Javascript
AngularJS与后端php的数据交互方法
Aug 13 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
Jun 03 Javascript
详解将微信小程序接口Promise化并使用async函数
Aug 05 Javascript
JavaScript多种滤镜算法实现代码实例
Dec 10 Javascript
javascript实现评分功能
Jun 24 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
js展开闭合效果演示代码
2013/07/24 Javascript
js调用css属性写法
2013/09/21 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
文件上传的几个示例分享【推荐】
2016/12/16 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
Python lambda函数基本用法实例分析
2018/03/16 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
python3获取url文件大小示例代码
2019/09/18 Python
python kafka 多线程消费者&手动提交实例
2019/12/21 Python
python如何实现复制目录到指定目录
2020/02/13 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
文职个人求职信范文
2013/09/23 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
MySQL索引失效的典型案例
2021/06/05 MySQL
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL