Appearance
js
const Koa = require('koa')
const app = new Koa()
// 中间件作用
// 1.决定是否继续向下执行,可以统一拦截做权限。
// 2.可以在中间件中扩展属性和方法
// 3.分割逻辑,基于中间件写插件
// Koa 中所有 use 中传入的方法都会包装成 promise
// 会把所有的 promise 变成一个 promise 链
// (要求内部 next 前必须加 await 或者 return next)
// 所有的异步逻辑都必须包装成 promise
// 如果加了 awiat next(),上一个会等待下一个执行完毕才执行 await next() 下面的代码
// 如果不加 await,下一个有异步逻辑,不会等待异步逻辑执行完再执行await next() 下面的代码
// 而是直接执行 next() 下面的代码,
// 因为不知道下面有没有异步,都统一加上 await
const wait = time => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve()
}, time);
})
}
app.use(async (ctx, next) => {
ctx.body = '1'
throw new Error('errr')
await next()
ctx.body = '2'
})
app.use(async (ctx, next) => {
ctx.body = '3'
await wait(1000)
await next()
ctx.body = '4'
})
app.use(async (ctx, next) => {
ctx.body = '5'
await next()
ctx.body = '6'
})
app.on('error', e => {
console.log(e)
})
app.listen(3000)