zclzye
侠客
侠客
  • 最后登录2025-01-01
  • 发帖数17
阅读:6001回复:4

[其它]koa中的洋葱模型实现

楼主#
更多 发布于:2021-02-22 10:36
koa中的洋葱模型实现


代码如下:
function compose(middlewares){
    return function (next) {
        function dispatch(i){
            let processingFunc = middlewares[i]; 
            if(i === middlewares.length) {
                processingFunc = next;
            }
            return processingFunc(dispatch.bind(null, i + 1))
        }
        return dispatch(0)
    }
}
function middleware1(next){
    console.log("do something before middleware 01")
    next()
    console.log("do something after middleware 01")
}
function middleware2 (next){
    console.log("do something before middleware 02")
    next()
    console.log("do something after middleware 02")
}
const middlewares = [middleware1, middleware2];
const fn = compose(middlewares); // ?
fn(last)
function last(){
    console.log("last")
}


执行 中间件1的时候看到了 next,当中间件1中的next被调用时,其实是去调用 中间件2去了,等等后面的中间件执行完了后,回到上一次执行的 next, 继续执行后面的代码.


代码仓库地址:
https://github.com/kenny6520/shared/tree/main/middleware
zclzye
侠客
侠客
  • 最后登录2025-01-01
  • 发帖数17
沙发#
发布于:2021-02-22 11:02
 更改错误地方
let processingFunc = middlewares
应该
let processingFunc = middlewares【i】



英文模式下的中括号,会看不到,请大家使用的时候自行修改一下啊
zclzye
侠客
侠客
  • 最后登录2025-01-01
  • 发帖数17
板凳#
发布于:2021-02-22 10:54
doubleyong:楼主,这么好的代码,如果有个好的标题的话,有利于更多人看到,哈哈回到原帖
好说
doubleyong
管理员
管理员
  • 最后登录2025-10-18
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
地板#
发布于:2021-02-22 10:49
zclzye:代码仓库地址:https://github.com/kenny6520/shared/tree/main/middleware回到原帖
楼主,这么好的代码,如果有个好的标题的话,有利于更多人看到,哈哈
知识需要管理,知识需要分享
zclzye
侠客
侠客
  • 最后登录2025-01-01
  • 发帖数17
4楼#
发布于:2021-02-22 10:45
游客


返回顶部

公众号

公众号