由于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);
.