首页 > 开发 > JS > 正文

node基于async/await对mysql进行封装

2024-05-06 16:52:28
字体:
来源:转载
供稿:网友

前言 

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);})();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JavaScript/Ajax教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表