中间件相关
- 创建
const Koa = require('koa');
const app = new Koa();
app.use(() => {
console.log('中间件 - 1');
});
app.listen(8888);
- 多中间件
/**
* fn1() {fn2() { fn3()}}
*/
// next
// next()
app.use((ctx, next) => {
console.log('中间件 - 1');
ctx.body = ' 11111';
next();
ctx.body += ' 11111over';
});
app.use((ctx, next) => {
console.log('中间件 - 2');
ctx.body += ' 2222';
next();
ctx.body += ' 2222over'
});
- 洋葱模型
- 异步中间件
// 使用 promise
// 使用 await
// 在获取到数据后再执行下一步,避免 undefined
app.use(async (ctx, next) => {
if (!user) {
ctx.body = '没有权限';
} else {
await next();
ctx.body = `<h1>${ctx.body}</h1>`;
}
});
app.use((ctx, next) => {
// 比如读取数据库(异步)
return new Promise((resolve, reject) => {
setTimeout(() => {
ctx.body = '照片';
resolve(); // or reject()
}, 1000)
});
});
-
静态资源中间件
-
动态资源路由中间件