课程名称:web前端架构师
课程章节:第13周 第四章
主讲老师:张轩
课程内容:技术选型 koa 和 egg
Koa2 以及它的基本特性
Koa2
官网地址:https://koajs.com/
和 Express 的区别
- 使用 Promise(async,await)代替 callback (node > v7.6.0)
- 使用 ctx(上下文对象)封装 req(Request) 和 res(Response), 以及一些常用的功能。
- 完全不同的中间件机制
- 更轻量级,没有捆绑任何中间件
- 官方文章:koa2 和 express 的区别。https://github.com/koajs/koa/blob/master/docs/koa-vs-express.md
const Koa = require('koa')
const app = new Koa()
app.use(async (ctx, next) => {
ctx.body = {
message: 'Koa',
count: 1
}
await next()
})
app.use(async (ctx) => {
ctx.body.count++
})
app.listen(3000)
koa2 没有带路由,使用路由需要安装 @koa/router (过去的 koa-router )
koa2 的中间键机制
再次理解 express 中间键机制
f1 (req, res) {
console.log('f1 start ->');
f2 (req, res) { // 第一个 next() 地方
console.log('f2 start ->');
f3 (req, res) { // 第二个 next() 地方
console.log('f3 service...');
res.send('Hello World!')
}
}
}
对错捕获处理起来很不友好,每一个回调都拥有一个新的调用栈,因此你没法对一个 callback 做 try catch 捕获,你需要在 Callback 里做错误捕获,然后一层一层向外传递。
Koa 中间件的演变
koa 与 exress响应机制的不同
- Express: 我们直接操作的是 res 对象,直接 res.send() 之后就立即响应了。
- Koa2: 数据的响应是通过 ctx.body 进行设置,注意这里仅是设置并没有立即响应,而是在所有的中间件结束之后做了响应。
koa2 的缺点
太轻量级了,代码规范、目录结构、逻辑分层都没有提供
egg js
Express 和 Koa2 的不足
简单而且扩展性强,适合个人的比较小的项目
没有约定,对于统一维护和开发非常不利
对于后端框架的需求
需要有一套优秀的统一的约定或者架构进行开发
有丰富的扩展机制和可定制性
Typescript 支持
Egg.js
地址:https://eggjs.org/zh-cn/
Star 数目众多
大厂出品,维护有保障。
国内开发者开发,中文文档质量有保证,文档写的非常全. https://www.eggjs.org/zh-CN/intro
约定优于配置,按照一套统一的约定进行应用开发。
一个插件只做一件事,高度可扩展的插件机制
支持 Typescript
Nest.js
地址: https://docs.nestjs.com/
内置并且完全支持 Typescript
开箱即用的应用程序架构
可扩展,松散耦合
大量采用了装饰器的写法(https://docs.nestjs.cn/8/controllers)[https://docs.nestjs.cn/8/controllers],装饰器路由使用起来费城舒服,但是装饰器一直是草稿阶段
使用egg js
创建项目
mkdir showcase && cd showcase
npm init egg --type=ts
然后选择对应模板创建项目
npm i
npm run dev