koa2框架使用

koa是express框架原班人馬打造

更輕量級

最重要的是!

不用寫回調


需要啥中間件就引用啥

const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const json = require('koa-json')
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')
const index = require('./routes/index')

// middlewares
app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))

app.use(json())
app.use(logger())
app.use(require('koa-static')(__dirname + '/public'))

app.use(views(__dirname + '/views', {
  extension: 'pug'
}))

// logger
app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

// routes
app.use(index.routes(), index.allowedMethods())
app.use(ship.routes(), ship.allowedMethods())
app.use(others.routes(), others.allowedMethods())
app.use(pscRoute.routes(), pscRoute.allowedMethods())
// error-handling
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});

module.exports = app

把路由添加進去後

const router = require('koa-router')()

通過如下辦法處理url

router.get('/ship', async (ctx, next) => {
    await ctx.render('index', {
        title: 'Hello ship!'
    })
});
router.post('/ship/info', async (ctx, next) => {
    var reqParam=ctx.request.body;
    const resStr = await shipService.getShipInfo(reqParam);
    ctx.body=resStr;

});
ctx
上下文(Context)

Koa Context 將 node 的 request 和 response 對象封裝到單個對象中,爲編寫 Web 應用程序和 API 提供了許多有用的方法。 這些操作在 HTTP 服務器開發中頻繁使用,它們被添加到此級別而不是更高級別的框架,這將強制中間件重新實現此通用功能。


每個 請求都將創建一個 Context,並在中間件中作爲接收器引用,或者 ctx 標識符


值得一提的是,,這種不用寫回調的寫法

基本規則


async 表示這是一個async函數,await只能用在這個函數裏面。


await 表示在這裏等待promise返回結果了,再繼續執行。


await 後面跟着的應該是一個promise對象(當然,其他返回值也沒關係,只是會立即執行,不過那樣就沒有意義了…)


service層

this.getShipInfo = async (reqParam) => {

dao調用

res返回串的處理

}

dao

this.getShipInfo = async(ccsno) =>{
        var sql = "select ~~~~ where id = :id";
        var param = {id:id};
        try {
            var results = await
            oracle.execute(sql,param);
            return oracleutil.getKeyValueDataArr(results);
        }
        catch (e) {
            return "error";
        }
    }

其中oracle執行方法:

exports.execute = async (statement, params=[]) =>
    new Promise((resolve, reject) => {
        oracledb.getConnection(
        ).then(connection => {
            return connection.execute(
                statement, params
            ).then(result => {
                resolve(result);
                return connection.release();
            }).catch(err => {
                日誌
                reject(err);
                return connection.release();
            })
        }).catch(err => {
            日誌
            reject(err)
        });
    });
exports.getconnection =  async ()=>oracledb.getConnection()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章