Iris 中间件

当我们在 iris 中讨论中间件时,我们讨论的是在HTTP请求生命周期中在主处理程序代码之前和/或之后的运行代码。

实现中间件功能,有下面这样两种方式:

方式一:

我们可以通过按顺序注册多个 handler 的方式来实现中间件的效果:

package main

import "github.com/kataras/iris"

func main() {
app := iris.New()
app.Get("/", before, mainHandler, after) login := app.Party("/login", loginHandler)
login.Get("/{name}", loginNameHandler) app.Run(iris.Addr(":9090"))
} func loginNameHandler(ctx iris.Context){
name := ctx.Params().Get("name")
println(name)
ctx.Next()
} func loginHandler(ctx iris.Context){
println("login")
ctx.Next()
} func before(ctx iris.Context){
println("before")
ctx.Next() //继续执行下一个handler,这本例中是mainHandler
} func mainHandler(ctx iris.Context){
println("mainHandler")
ctx.Next()
} func after(ctx iris.Context){
println("after")
ctx.Next()
}

访问 localhost:9090/输出结果:

before
mainHandler
after

访问 localhost:9090/login/zhangsan 输出结果:

login
zhangsan

方式二(全局中间件):

我们会注意到,访问 login 路径时的中间件代码并没有被执行。如果希望在全局范围内使用中间件,而不仅仅是针对某一个路径时,可以通过使用 UseDone 方法来为当前域名下的所有路由进行注册

func main() {
app := iris.New()
//注意 Use 和 Done 方法需要写在绑定访问路径的方法之前 //使用 ‘Use’ 方法作为当前域名下所有路由的第一个处理函数
//而使用 ‘UseGlobal’ 方法注册的中间件,会在包括所有子域名在内的所有路由中执行
app.Use(UseBefore)
app.Done(DoneAfter) app.Get("/", before, mainHandler, after)
login := app.Party("/login", loginHandler)
login.Get("/{name}", loginNameHandler) app.Run(iris.Addr(":9090"))
} func UseBefore(ctx iris.Context){
println("use - before")
ctx.Next()
} func DoneAfter(ctx iris.Context) {
println("Done - after")
ctx.Next()
}

访问 localhost:9090/ 输出结果:

use - before
before
mainHandler
after
Done - after

访问 localhost:9090/login/zhangsan 输出结果:

use - before
login
zhangsan
Done - after

可以看到通过 Use 和 Done 方法注册的中间件都被执行了。

Go Iris 中间件的更多相关文章

  1. iris中间件

    最近使用golang写的时候涉及到权限校验,用中间件(使用iris框架内的东西) 自己摸索出一种自己的方式 iris.UseFunc(MiddlewareFunc)使用这个方法,会在所有的请求之前执行 ...

  2. Iris jwt 使用

    jwt分为三个部分: ​ 1.header,用来存储算法和token类型等信息 ​ 2.payload, 一些简单的信息 ​ 3.签名,来验证token是否合法 iris-jwt 这是初始化jwt中间 ...

  3. Iris框架源码阅读和分析

    iris包结构简介 iris包含了很多包,下面这些是分析过程中接触到的东西. 能力有限,多多包涵,欢迎联系QQ:2922530320 一起交流 context包包含: Context (接口) con ...

  4. Go实战--也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)

    ris自称是Go语言中所有Web框架最快的,它的特点如下: 1.聚焦高性能 2.健壮的静态路由支持和通配符子域名支持. 3.视图系统支持超过5以上模板 4.支持定制事件的高可扩展性Websocket ...

  5. GoWeb开发_Iris框架讲解(四):Iris框架设置操作

    路由组的使用 在实际开发中,我们通常都是按照模块进行开发,同一模块的不同接口url往往是最后的一级url不同,具有相同的前缀url.因此,我们期望在后台开发中,可以按照模块来进行处理我们的请求,对于这 ...

  6. 👮 Golang Gin/Ace/Iris/Echo RBAC 鉴权库

    GRBAC 项目地址: https://github.com/storyicon/grbac Grbac是一个快速,优雅和简洁的RBAC框架.它支持增强的通配符并使用Radix树匹配HTTP请求.令人 ...

  7. 安装iris框架

    1.导语 目前Go语言已经为大多数人所熟知,越来越多的开发人员选择使用Go语言来进行开发,但是如何使用 Go来进行web开发,在其他编程语言中都有对应的开发框架,当然在Go中也有,就是即将要介绍的-- ...

  8. 【计算机视觉】深度相机(九)--OpenNI API及中间件说明

    本文由官方文档翻译而来 总览 目的 OpenNI 2.0 API(应用程序编程接口)提供了访问PrimerSense的兼容深度传感器.这就使得一个应用程序能够初始化传感器和从设备接收深度(depth) ...

  9. Iris路由和路由组

    package main import ( "github.com/kataras/iris" "github.com/kataras/iris/context" ...

随机推荐

  1. nginx触屏版跟PC的代理设置

    server { listen ; set $mobile_rewrite do_not_perform; if ( $http_user_agent ~* "(android|bb\d+| ...

  2. 从零开始使用mocha测试

    mocha 需要在node环境下跑,请确保已经安装了node   1.新建一个文件夹 test   2.命令行切换到test目录下,执行命令:npm init ,出现选择按enter,一系列选择完成之 ...

  3. STM32工程模版

    STM32工程模版,看过来 ST库源码去官方下载 创建工程目录 doc:存放说明文档 lib:存放库文件 listing:存放编译产生的中间文件 output:存放生成的文件 project:存放工程 ...

  4. wordpress程序打开太慢的解决方案(一步搞定)

    周末两天没有打开自己的赵一鸣随笔博客,今天访问了一下,打开速度太慢了,看看浏览器栏目,网站标题已经显示出来了,但是网页却是一片空白,什么都没有,刚开始以为是我们公司网速的问题,就没有特别注意这件事情. ...

  5. 把app(apk和ipa文件)安装包放在服务器上供用户下方法

    怎么把app(apk和ipa文件)安装包放在服务器上供用户下载? IIS服务器网站不能下载.apk文件的原因:IIS的默认MIME类型中没有.apk文件,所以无法下载.解决办法:给.apk格式文件添加 ...

  6. 在cmd下import cv2报错——OpenCV实现BRISK

    平台:win10 x64 +JetBrains PyCharm 2018.2.4 x64 +Anaconda3(python3.7.0+opencv3.4.5) Issue说明:同学发了个python ...

  7. RabbitMQ 功能

    学习完了rabbitmq总一下 RabbitMQ依赖的语言 erlang 第一它可以实现不同程序之间的程序信息储存交互,在易用性.扩展性.高可用性的方面不俗. rabbitmq相当于一个中间人,我们同 ...

  8. Oracle笔记(十四) 用户管理

    SQL语句分为三类:DML.DDL.DCL,之前已经讲解完了DML和DDL,现在就差DCL操作的,DCL主要表示的是数据库的控制语句,控制的就是操作权限,而在DCL之中,主要有两个语法:GRANT.R ...

  9. web开发:jquery高级

    一.jq选择器 二.属性操作 三.jq轮播图 四.样式操作 五.jq动事件 六.jq动画 七.自定义动画 八.jq动画案例 一.jq选择器 - css3语法选择器 ```js$('css3选择器位') ...

  10. linux usb驱动记录(一)

    一.linux 下的usb驱动框架 在linux系统中,usb驱动可以从两个角度去观察,一个是主机侧,一个是设备侧.linux usb 驱动的总体框架如下图所示:   从主机侧看usb驱动可分为四层: ...