Cowboy 用户指南 (二十三) - Middlewares

中间件

Cowboy将请求处理委托给中间件组件。默认情况下,定义了两个中间件,用于路由和处理请求,在本指南的大部分内容中有详细介绍。

中间件让您完全控制如何处理请求。您可以将自己的中间件添加到其中,或者根据需要完全更改中间件链。

Cowboy将按照给定的顺序执行所有中间件,除非其中一个决定停止处理。

用法

中间件只需要实现一个回调:execute/2。它在cowboy_middleware行为中定义。

这个回调函数有两个参数。第一个是Req对象。第二是环境问题。

中间件可以返回以下三种不同的值:

  • {ok, Req, Env} 继续请求处理
  • {suspend, Module, Function, Args} 进入休眠
  • {stop, Req} 停止处理并继续处理下一个请求

值得注意的是,当休眠时,处理将在给定的MFA上恢复,丢弃所有以前的堆栈跟踪。请确保将Req和Env保存在这个MFA的参数中以供以后使用。

如果在中间件处理过程中发生错误,Cowboy将不会尝试将错误发送回套接字,进程将崩溃。由中间件来确保在出现问题时发送应答。

配置

中间件环境被定义为env协议选项。在前面的章节中,当我们需要传递路由信息时,我们简要地看到了它。它是一个元组列表,第一个元素是atom,第二个是任何Erlang术语。

环境中有两个值是保留的:

  • listener包含监听器的名称
  • result包含处理的结果

listener值总是定义的。result值可以由任何中间件设置。如果设置为ok以外的任何内容,那么Cowboy将不会处理此连接上的任何后续请求。

伴随Cowboy而来的中间件可能定义或要求执行其他环境值。

你可以通过调用cowboy:set_env/3方便函数来更新环境,在环境中添加或替换一个值。

路由中间件

路由中间件需要分派值。如果路由成功,它将把处理程序名称和选项分别放在环境的handler和handler_opts值中。

处理中间件

处理程序中间件需要handler和handler_opts值。它将请求处理的结果放入result中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值