当前位置: 首页 > 后端技术 > Node.js

mysqljs在koa2中的正确使用方法

时间:2023-04-04 00:19:40 Node.js

截止到今天,mysqljs在github上已经获得了10000+的star,可以说是最流行的mysql驱动了,但是好像不能把mysqljs应用到koa2上太方便了,koa2使用的最新的语法async,await,但是mysqljs还在回调阶段。今天的文章就是解决这个问题,很简单。1、在实际开发中,我们必须使用连接池的形式,所以选择mysql.createPool的方法:varmysql=require('mysql');varpool=mysql.createPool(...);pool。getConnection(function(err,connection){//使用连接connection.query('SELECTsomethingFROMsometable',function(error,results,fields){//并完成连接。connection.release();//释放后处理错误if(error)throwerror;//这里不要使用连接,已经归还池了});});可以:varmysql=require('mysql');varpool=mysql.createPool(...);constq=function(sql,values){returnnewPromise((resolve,reject)=>{pool.getConnection((err,conn)=>{if(err)returnreject(err)conn.query(sql,values,(err,rows)=>{if(err)reject(err)elseresolve(rows)conn.release()})})})}经过上面的封装,就可以优雅的完成一个查询用户信息的操作了这个:异步函数ongetUserInfoById(id){letuserInfo=awaitq('select*fromuserwhereid=?',[id])console.log(userInfo)}3.受tornado的mysql操作库torndb的启发,可以做这是一个完整的包:constmysql=require('mysql')constdefautConfig={host:'localhost',user:'root',password:'',database:'test',connectionLimit:20}constAsyncMysqljs=function(config=defautConfig){constpool=mysql.createPool(config)constq=function(sql,values){returnnewPromise((resolve,reject)=>{pool.getConnection((err,conn)=>{if(err)returnreject(err)conn.query(sql,values,(err,rows)=>{if(err)reject(err)elseresolve(rows)conn.release()})})})}/*从数据库中查询一条数据,返回值是一个对象而不是数组。sql语句最好加上唯一性限制*/constget=(sql,values)=>{try{returnq(sql,values).然后(rows=>{if(rows.length>=1){returnrows[0]}})}catch(err){returnnewPromise((resolve,reject)=>{reject(err)})}}return{query:q,delete:q,update:q,insert:q,execute:q,get}}module.exports=AsyncMysqljs具体代码可以查看我的github项目asyncmysqljs,欢迎推荐或star