入门
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 = str
next()
console.log(4)
})
await 意义
1 等待求值
2 阻塞线程,阻塞代码一般情况下是不方便验证,但异步逻辑是方便验证的,常见的异步操作有网络请求,读取文件,操作数据库。