在学习express和koa中间件的时候,我自己一直按照洋葱模型来理解。但是理论上他们是不一样的。
//express版本
var express = require('express');
var app = express();
app.use((req, res, next) => {
setTimeout(() => {
console.log('start1')
})
next();
console.log('end1')
})
app.use((req, res, next) => {
console.log('start2')
next();
console.log('end2');
})
app.use((req, res, next) => {
console.log('start3');
next();
console.log('end3');
})
app.get('/', function (req, res) {
console.log('before')
res.send('Hello World!');
console.log('after')
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
koa版本
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
await new Promise((resolve, reject) => {
setTimeout(() => {
console.log('start1')
resolve()
})
})
await next();
console.log('end1')
})
app.use(async (ctx, next) => {
console.log('start2')
await next();
console.log('end2');
})
app.use(async (ctx, next) => {
console.log('start3');
await next();
console.log('end3');
})
app.use(ctx => {
console.log('before');
ctx.body = 'Hello Koa';
console.log('after');
});
app.listen(3001)
现在的问题是,如何修改上面的代码,就能明显区分出express和koa中间件作用机制的不同?
你的示例代码本身不就体现出来两个的区别了吗