Egg01 入门

本文介绍了Egg.js作为企业级Web框架的基本概念,强调其与Express和Koa的区别,特别是Egg如何基于Koa进行扩展,包括插件机制。文章详细阐述了Egg的渐进式开发路径,从原始代码到独立插件,再到框架的演变过程,旨在帮助开发者理解如何在实际项目中有效利用Egg。
摘要由CSDN通过智能技术生成

在调研BFF的过程中,看到蚂蚁金服自研的BFF的开发框架BFF Chair是基于Egg.js开发的。BFF Chair没有开源,但是Egg.js已经开源了,如果需要引入BFF,需要基于Egg.js的基础上开发自己的BFF开发框架。

1 Egg.js是什么

Egg是一个为了开发企业级应用的框架,没有集成太多功能,值专注于提供Web开发的核心功能,并且提供了一套灵活可扩展的插件机制,来满足定制需求。

Egg奉行『约定优于配置』,在团队内应当按照一套统一的约定进行应用开发,降低沟通成本和学习成本。但约定不等于扩展性差,可以按照团队的约定制定框架。

2 Egg与其他Web框架的比较

2.1 与Express的差异

Express应用很广泛,简单且扩展性强,适合做个人项目,但框架本身缺少约定,标准的MVC模型会有各种千奇百怪的写法。而Egg按照约定进行开发,团队协作成本低。

2.2 与Koa的关系

Koa和Express的设计风格类似,底层都是公用的同一套HTTP基础库,但是二者有一些区别:

(1)异步解决方案

Express的异步编程模型是callback形式的,而Koa使用了async/await的形式

(2)Middleware中间件

Koa的中间件模型是洋葱圈模型

当中间件在执行时:

middleware.gif

所有的请求经过一个中间件的时候都会执行两次,可以很方便的话实现后置处理逻辑。

(3)Context

Express只有Request和Response两个对象,Koa增加了Context对象,作为当次请求的上下文对象(Koa1中为中间件的this,Koa2中作为中间件的第一个参数传入),可以将以此请求相关的上下文都挂载到这个对象,同时Context也挂在了Request和Response两个对象,这两个对象提供了大量的便捷方法辅助开发,例如:

request.query
request.hostname
response.body
response.status

(4)异常处理

通过同步方式编写异步代码带来的另一个非常大的好处就是异常处理非常自然,使用try/catch就可以将按照规范编写的代码中的所有错误捕获到。可以很方便的编写一个自定义的错误处理中间件:

async function onerror(ctx, next) {
  try {
    await next();
  } catch (err) {
    ctx.app.emit('error', err);
    ctx.body = 'server error';
    ctx.status = err.status || 500;
  }
}

只需要将这个中间件放在其他中间件之前,就可以捕获它们所有的同步或者异步代码中抛出的异常了。

2.3 Egg继承于Koa

Egg选择了Koa作为基础框架,在它的模型基础上,做了一些增强。

2.3.1 扩展

在基于Egg的框架或者应用中,可以通过定义app/extend/{application, context, request, response}.js中来扩展Koa中对应的四个对象的原型。通过这个功能,可以快速的增加更多的辅助方法。

例如,在app/extend/context.js中写入以下代码:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值