Koa系列2:Koa中使用async/await封装使用mysql

由于mysql模块的操作都是异步操作,每次操作的结果都是在回调函数中执行,现在有了async/await,就可以用同步的写法去操作数据库

Promise封装mysql模块

  • Promise封装 ./async-db.js

const mysql = require('mysql')
const pool = mysql.createPool({
  host     :  '127.0.0.1',
  user     :  'root',
  password :  '123456',
  database :  'my_database'
})

//将数据库的异步操作,封装在一个Promise中
let query = function( sql, values ) {
  return new Promise(( resolve, reject ) => {
    pool.getConnection(function(err, connection) {
      if (err) {
        reject( err )
      } else {
        connection.query(sql, values, ( err, rows) => {
          if ( err ) {
            reject( err )
          } else {
            resolve( rows )
          }
          connection.release()
        })
      }
    })
  })
}

module.exports = { query }
  • async/await使用Promise封装的mysql,开发自己的中间件./getdata.js

const { query } = require('./async-db');
//引用封装的mysql模块,来开发获取数据的中间件:
function getData(){
  return async (ctx, next) => {
     let sql = 'SELECT * FROM my_table';
     // await等待query查询数据库,Promise异步操作完成后,通过resolve()返回查询到的数据列表
     let dataList = await query( sql );
     if(dataList[0]){  //数据不为空
       //返回响应状态吗和响应信息
       ctx.status = 200;
       ctx.body = {code: 1, msg: 'query database success'}
     }else{
       ctx.status = 200;
       ctx.body = {code: 0, msg: 'query database error'}
     }
  }
}

module.exports = { getData, }
  • Koa应用中使用中间件
const Koa = require('koa');
const router = require('koa-router')();
const bodyParser = require('koa-bodyparser');
const {getData} = require('./getdata');
const app = new Koa();
app.use(bodyParser());  //启用koa-bodyparser,需要它来获取post数据

router.get('/login', getData());

app.use(router.routs);
app.use(router.allowedMethods());
app.listen(2000);

你可能感兴趣的:(Koa系列2:Koa中使用async/await封装使用mysql)