中间件

作者: 正向反馈 | 来源:发表于2018-05-09 16:03 被阅读0次

    koa,rails里的中间件基本上就是java web里的filter, 都是采用的责任链设计模式

    以lua为例,实现中间件模式:

    
    --将收到的消息路由到各自的处理器上
    --所谓的中间件
    
    local m = {}
    package.loaded[...] = m
    
    
    --{fn(msg, next)}
    m.middlewares = {}
    
    function m.route(msg)
        local next 
        next = (function ()
            local i = 0
            return function ()
                i = i + 1
                if i > #m.middlewares then return end
    
                local middleware = m.middlewares[i]
                return middleware(msg, next)
            end
        end)()
    
        next()
    end
    function m.use(middleware)
        table.insert(m.middlewares)
    end
    

    解释

    middlewares 中间件列表,先入者先调用
    核心在于next函数的构建上
    next函数使用闭包构建出当前中间件列表的调用状态:

    • i 当前调用的中间件索引

    每调用一次next函数, i都将递增,然后调用i所对应的中间件
    中间件内部自己决定要不要调用next函数,什么时候调用next函数,通过在 调用前和调用后插入不同的代码,就可以在一次请求中进行预处理和后处理

    用途

    例:

    • 数据库连接
      在请求预处理阶段打开数据库连接,
      在后处理阶段提交事务并关闭

    • 请求日志

    • 统一的错误处理
      以http为例,在中间件捕获异常后,输出5xx statuscode

    相关文章

      网友评论

          本文标题:中间件

          本文链接:https://www.haomeiwen.com/subject/lwxorftx.html