node基于async/await對(duì)mysql進(jìn)行封裝
前言
node是基于異步的,因此在進(jìn)行數(shù)據(jù)庫查詢操作的通常是通過回調(diào)來操作查詢結(jié)果。但是在有了es7的async/await,基本不再需要回調(diào)了,所以本篇是基于async/await對(duì)mysql進(jìn)行一次操作封裝,讓查詢更加方便。(node版本需>=7.0)。
原理
簡(jiǎn)單來說,async/await的實(shí)現(xiàn)原理是基于promise,根據(jù)promise的狀態(tài)來判斷是否真正返回,因此我們可以在mysql真正查詢到結(jié)果后將promise狀態(tài)切換為resolve,返回結(jié)果。如出現(xiàn)錯(cuò)誤通過reject返回錯(cuò)誤信息,reject需要用try/catch進(jìn)行捕獲。
代碼
'use strict'; const mysql = require( 'mysql' ); var pool = mysql.createPool( { connectionLimit : 50, host : '', user : '', password : '', database : '', multipleStatements : true //是否允許執(zhí)行多條sql語句 } ); //將結(jié)果已對(duì)象數(shù)組返回 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); }); }); }); }; //返回一個(gè)對(duì)象 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 ); }); }); }); }; //返回單個(gè)查詢結(jié)果 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); }); }); }); } //執(zhí)行代碼,返回執(zhí)行結(jié)果 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 ); }); }); }); } //模塊導(dǎo)出 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); })();
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
node.js實(shí)現(xiàn)回調(diào)的方法示例
這篇文章主要介紹了node.js實(shí)現(xiàn)回調(diào)的方法,結(jié)合實(shí)例形式分析了node.js實(shí)現(xiàn)向回調(diào)函數(shù)傳遞參數(shù)、閉包的使用及鏈?zhǔn)交卣{(diào)相關(guān)操作技巧,需要的朋友可以參考下2017-03-03詳解webpack打包nodejs項(xiàng)目(前端代碼)
這篇文章主要介紹了webpack打包nodejs項(xiàng)目(前端代碼),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09windows系統(tǒng)下安裝npm(Node.js)方法教程
在Windows環(huán)境下進(jìn)行Node.js的安裝并不是一件復(fù)雜的事情,但是在安裝過程中需要注意一些細(xì)節(jié),下面這篇文章主要給大家介紹了關(guān)于windows系統(tǒng)下安裝npm(Node.js)的相關(guān)資料,需要的朋友可以參考下2023-12-12NodeJS?Express使用ORM模型訪問關(guān)系型數(shù)據(jù)庫流程詳解
這篇文章主要介紹了NodeJS?Express使用ORM模型訪問關(guān)系型數(shù)據(jù)庫流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01node.js使用express-jwt報(bào)錯(cuò):expressJWT?is?not?a?function解決
這篇文章主要給大家介紹了關(guān)于node.js使用express-jwt報(bào)錯(cuò):expressJWT?is?not?a?function解決的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03關(guān)于node+mysql數(shù)據(jù)庫連接池連接
這篇文章主要介紹了關(guān)于node+mysql數(shù)據(jù)庫連接池連接,mysql有兩種連接方式:一種是直接連接 另一種是池化連接,我們這篇講的是池化連接,需要的朋友可以參考下2023-04-04簡(jiǎn)單了解node npm cnpm的具體使用方法
這篇文章主要介紹了簡(jiǎn)單了解node npm cnpm的具體使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02