什么是框架(frame):
封装原生代码的API
规范流程和格式
让开发人员更加关注业务代码,提高开发效率
框架(frame)和库(lib)的区别:
框架是唯一的,库就可以共存
框架关注全流程,库关注单个功能
koa2的安装和使用:
初始化 npm init
安装 npm install koa2 --save
基本使用
初体验:
前提:在项目根目录下
const Koa = require('koa');
const app = new Koa();
// ctx-->context 上下文
app.use(async(ctx) => {
ctx.body = 'hello word';
})
app.listen(3000);
通过 node index.js在终端运行
安装koa-generator脚手架搭建项目:
- 定位到项目根目录
- 通过终端(如:cdm)运行:npm install -g koa-generator,可通过 koa2 --version来验证是否安装成功
- 安装完成后,再输入 koa2 x ,便会自动创建一个以x为名的文件夹
- 进入x文件夹里,通过 npm install 安装相关包
- 最后可使用 npm run dev来运行该项目(前提是你已全局安装nodemon),在浏览器里通过:localhost:3000来查看
以上就是安装完成的截图
koa2中间件
什么是中间件:
一个流程上,独立的业务模块
可扩展,可插拨
类似于工厂的流水线
使用中间件的原因:
拆分业务模块,使代码清晰
统一使用中间件,使得各业务代码都规范标准
扩展性好,易添加、易删除
koa2的洋葱圈模型
中间件机制,是koa2的精髓
每个中间件丢失async函数
中间件运行的机制,就像洋葱圈模型
简易的洋葱圈模型示例:
// 演示async await执行顺序
//(代码要放在浏览器中运行)
//加载一张图片
async function getImg(url = '') {
await fetch(url)
}
//
async function fn() {
const url = 'https://avatar.csdnimg.cn/8/C/5/1_weixin_43285360_1620110895.jpg'
const start = Date.now(); //记录当前时间
await getImg(url); //调用加载图片
const ms = Date.now() - start //计算时间差
console.log(`加载图片花费了${ms}毫秒`)
}
// fn()
async function A() {
console.log('A开始')
await fn()
console.log('A结束')
}
A()
// A fn() getImg fn() A()
示例代码:
// koa2中间件的洋葱圈模型
const Koa = require('koa')
const app = new Koa()
//logger ctx = req+response
app.use(async(ctx, next) => {
await next() //先执行下一个中间件
const rt = ctx.response.get('X-Response-Time') //这里等价于res 获取时间差
console.log(`${ctx.method} ${ctx.url}-${rt}`)
})
//x-response-time
app.use(async(ctx, next) => {
const start = Date.now()
await next() //先执行下一个中间件
const ms = Date.now() - start //计算时间差
ctx.set('X-Response-Time', `${ms}ms`) //记录/设置时间差
})
//response
app.use(async(ctx, next) => {
ctx.body = 'Hell word'
})
app.listen(3000)
console.log('koa已经开始监听3000端口')
更多请参考:koa官网