入门
const Koa = require('koa')const app = new Koa()function test() {console.log('hello 7yue')}app.use(test)app.listen(3000)
中间件的理解
app.use为中间件,只有在进行请求时才会被调用
koa如何传递参数以及链式调用的
通过ctx,上下文 以及next执行,也就是下个函数
const Koa = require('koa')const app = new Koa()function test() {console.log('hello 7yue')}function test1() {console.log('hello 8yue')}app.use((ctx,next)=>{test()next()})app.use(test1)app.listen(3000)
洋葱模型的执行特点

比如下面函数的打印结果: 1 3 4 2
const Koa = require('koa')const app = new Koa()app.use((ctx,next)=>{console.log(1)next()console.log(2)})app.use(async (ctx,next)=>{console.log(1)await next()console.log(2)})app.use((ctx,next)=>{console.log(3)next()console.log(4)})app.listen(3000)
那么如何保证程序的确定能按照洋葱模型执行呢?加async await 即可。
为什么要保证洋葱模型
要知道后面函数都执行完成,或者要知道其执行结果,比如计时
不同中间件如何传值 ?利用ctx
app.use(async(ctx,next)=>{console.log(1)await next()console.log(ctx.str)console.log(2)})app.use((ctx,next)=>{console.log(3)const str = 'yyue'ctx.str = strnext()console.log(4)})
await 意义
1 等待求值
2 阻塞线程,阻塞代码一般情况下是不方便验证,但异步逻辑是方便验证的,常见的异步操作有网络请求,读取文件,操作数据库。
