前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >node封装mysql操作

node封装mysql操作

作者头像
用户2038589
发布2018-09-06 15:36:47
1.5K0
发布2018-09-06 15:36:47
举报
文章被收录于专栏:青青天空树
前言  

        node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果。但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一次操作封装,让查询更加方便。(node版本需>=7.0)。 

原理

        简单来说,async/await的实现原理是基于promise,根据promise的状态来判断是否真正返回,因此我们可以在mysql真正查询到结果后将promise状态切换为resolve,返回结果。如出现错误通过reject返回错误信息,reject需要用try/catch进行捕获。

代码
代码语言:javascript
复制
  1 'use strict';
  2 const mysql  = require( 'mysql' );
  3 
  4 var pool  = mysql.createPool( {
  5     connectionLimit : 50,
  6     host            : '',
  7     user            : '',
  8     password    : '',
  9     database     : '',
 10     multipleStatements : true  //是否允许执行多条sql语句
 11 } );
 12 //将结果已对象数组返回
 13 var row=( sql , ...params )=>{
 14     return new Promise(function(resolve,reject){
 15         pool.getConnection(function(err,connection){
 16             if(err){
 17                 reject(err);
 18                 return; 
 19             }
 20             connection.query( sql , params , function(error,res){
 21                 connection.release();
 22                 if(error){
 23                     reject(error);
 24                     return;
 25                 }
 26                 resolve(res);
 27             });
 28         });
 29     });
 30 };
 31 //返回一个对象
 32 var first=( sql , ...params )=>{
 33     return new Promise(function(resolve,reject){
 34         pool.getConnection(function(err,connection){
 35             if(err){
 36                 reject(err);
 37                 return; 
 38             }
 39             connection.query( sql , params , function(error,res){
 40                 connection.release();
 41                 if(error){
 42                     reject(error);
 43                     return;
 44                 }
 45                 resolve( res[0] || null );
 46             });
 47         });
 48     });
 49 };
 50 //返回单个查询结果
 51 var single=(sql , ...params )=>{
 52     return new Promise(function(resolve,reject){
 53         pool.getConnection(function(err,connection){
 54             if(err){
 55                 reject(err);
 56                 return; 
 57             }
 58             connection.query( sql , params , function(error,res){
 59                 connection.release();
 60                 if(error){
 61                     reject( error );
 62                     return;
 63                 }
 64                 for( let i in res[0] )
 65                 {
 66                     resolve( res[0][i] || null );
 67                     return;
 68                 }
 69                 resolve(null);
 70             });
 71         });
 72     });
 73 }
 74 //执行代码,返回执行结果
 75 var execute=(sql , ...params )=>{
 76     return new Promise(function(resolve,reject){
 77         pool.getConnection(function(err,connection){
 78             if(err){
 79                 reject(err);
 80                 return; 
 81             }
 82             connection.query( sql , params , function(error,res){
 83                 connection.release();
 84                 if(error){
 85                     reject(error);
 86                     return;
 87                 }
 88                 resolve( res );
 89             });
 90         });
 91     });
 92 }
 93 
 94 //模块导出
 95 module.exports = {
 96     ROW     : row ,
 97     FIRST   : first ,
 98     SINGLE  : single ,
 99     EXECUTE : execute 
100 }
101  

使用示例。

代码语言:javascript
复制
const mysql = require('./mysql.js');

(async ()=>{
    let s = await mysql.row(sql,params);
    console.log(s);
})();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-09-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言  
  • 原理
  • 代码
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档