因爲mysql模塊的操做都是異步操做,每次操做的結果都是在回調函數中執行,如今有了async/await,就能夠用同步的寫法去操做數據庫javascript
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 }
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, }
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);
.java