中间件

作者: 正向反馈 | 来源:发表于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

相关文章

  • 翻译

    Laravel 的路由中间件 简介 创建中间件 注册中间件全局中间件为路由指定中间件中间件组 中间件参数 Term...

  • 中间件学习——具体分类

    中间件分为远程过程调用中间件、数据访问中间件、消息中间件、事务(交易)处理中间件、分布式对象中间件。 远程过程调用...

  • nodejs19-express中间件

    中间件 匹配路由之前和之后做的操作 应用级中间件 路由级中间件 错误处理中间件 内置中间件 第三方中间件 应用级中...

  • 4.3KOA 中间件模块化与中间件合成

    中间件模块化与中间件合成 一、中间件模块化 定义中间件模块 使用中间件模块 二、使用 koa-compose 模块...

  • 4.2KOA 中间件执行流程

    中间件执行流程 代码执行流程 中间件 1 开始执行中间件 2 开始执行执行内容中间件 2 结束执行中间件 1 结束...

  • 13.中间件和上下文处理器

    中间件 中间件的引入image.png django中的中间件django 中的中间件(middleware),在...

  • Express学习

    使用中间件 Express 应用可使用如下几种中间件:* 应用级中间件* 路由级中间件* 错误处理中间...

  • Express 中间件

    中间件的概念 什么是中间件 中间件(Middleware),特指业务流程的中间处理环节。 Express 中间件的...

  • Scrapy爬虫框架(七) ------ 下载中间件(Midd

    1. Spider 下载中间件(Middleware) Spider 中间件(Middleware) 下载器中间件...

  • laravel api设置Accept 头

    一、创建中间件设置Accept 头 生成中间件 设置Accept头 将中间件添加到api中间件组中

网友评论

      本文标题:中间件

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