中间件

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容