node基于async/await对mysql进行封装
2019-06-20 10:09
2783 查看
前言
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] || 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); })();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
[i]相关文章推荐
- JDBC连接MySQL-基于MVC架构进行简单封装
- 对MySql的dql和dml操作进行封装,成为固定的工具类
- 用python 对mysql.connector进行封装
- 封装了一个对mysql进行异步IO的小工具
- php+mysql的分页进行封装调用
- Mysql通用查询方法(采用泛型确定输入类型,BeanUtils进行对象封装)
- PHP使用类对mysql的使用进行封装
- Cocos2d-js03_画九宫格及对节点进行封装
- MySQL的limit是针对结果集进行分页。
- mysql 增加新用户并进行授权
- Mysql 拿指定经纬度与数据库多条经纬度进行距离计算 (转)
- [置顶] android 软电话 开发包-JNI 封装 SIP 协议,可进行二次开发应用于VOIP
- Mysql 拿指定经纬度与数据库多条经纬度进行距离计算(有偏差)
- 用mysqlpp进行mysql表的查询,发现有中文乱码,整理一下解决方案
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)
- 关于Mysql查看某个ip连接数及删除掉这个ip连接的方法(也可以进行mysql锁表解锁)
- mySQL进行多表的左外连接、右外连接、内连接、全外连接
- MySQL系列第四篇:利用MySQL工具之SQLYog进行数据导入
- MySQL对数据表进行分组查询
- scrapy中怎么进行异步插入数据库mysql