koa 項目中引入 mysql

因爲mysql模塊的操做都是異步操做,每次操做的結果都是在回調函數中執行,如今有了async/await,就能夠用同步的寫法去操做數據庫javascript

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);

.java

相關文章
相關標籤/搜索