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
值得一提的是,,这种不用写回调的写法
基本规则
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()