中间件

2018-05-09  本文已影响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函数使用闭包构建出当前中间件列表的调用状态:

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

用途

例:

上一篇下一篇

猜你喜欢

热点阅读