Egg知识整理系列(一)
Koa
Koa是由Express框架原班人马打造的全新web框架,与Express风格类似,底层都是沿用同一套Http基础库,但是有几项显著差别:
- Middleware洋葱圈模型:Koa中间件采用洋葱圈模型,所有的请求经过中间件都会执行两次,可以非常方便的实现后置处理逻辑;
- Context:与Express中只有Requese和Response不同,Koa增加了Context作为上下文对象,可以在请求中将相关字段挂载在Context上。
- 异常处理:用户可以很方便的自定义错误处理中间件放在其他中间件之前,就可以捕获到异步或同步代码发生的错误。如:
async function onerror(ctx, next) {
try {
await next();
} catch (err) {
ctx.app.emit('error', err);
ctx.body = 'server error';
ctx.status = err.status || 500;
}
}
Egg继承Koa
众所周知,Koa框架是一个极简框架扩展性非常强,而Egg在此基础上做了增强。
扩展
在Egg框架中,可以通过定义app/extend/{application,context,request,response}.js来扩展Koa框架中四个框架的原型,如在app/extend/context.js中定义如下代码:
module.exports = {
get isXXX() {
return xxx;
}
}
在controller.js中,可以利用刚才的定义:
exports.handler = ctx => {
ctx.body = ctx.isXXX ? 'is xxx' : 'is not xxx';
};
插件
Egg提供了更加强大的插件机制,一个插件可以包含:
- extend: 扩展基础对象的上下文,提供各种工具类、属性。
- middleware: 增加一个或多个中间件,提供请求的前置、后置处理逻辑。
- config: 配置各个环境下插件自身的默认配置项。