Go Iris 中间件
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 路径时的中间件代码并没有被执行。如果希望在全局范围内使用中间件,而不仅仅是针对某一个路径时,可以通过使用 Use 和 Done 方法来为当前域名下的所有路由进行注册
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 中间件的更多相关文章
- iris中间件
最近使用golang写的时候涉及到权限校验,用中间件(使用iris框架内的东西) 自己摸索出一种自己的方式 iris.UseFunc(MiddlewareFunc)使用这个方法,会在所有的请求之前执行 ...
- Iris jwt 使用
jwt分为三个部分: 1.header,用来存储算法和token类型等信息 2.payload, 一些简单的信息 3.签名,来验证token是否合法 iris-jwt 这是初始化jwt中间 ...
- Iris框架源码阅读和分析
iris包结构简介 iris包含了很多包,下面这些是分析过程中接触到的东西. 能力有限,多多包涵,欢迎联系QQ:2922530320 一起交流 context包包含: Context (接口) con ...
- Go实战--也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)
ris自称是Go语言中所有Web框架最快的,它的特点如下: 1.聚焦高性能 2.健壮的静态路由支持和通配符子域名支持. 3.视图系统支持超过5以上模板 4.支持定制事件的高可扩展性Websocket ...
- GoWeb开发_Iris框架讲解(四):Iris框架设置操作
路由组的使用 在实际开发中,我们通常都是按照模块进行开发,同一模块的不同接口url往往是最后的一级url不同,具有相同的前缀url.因此,我们期望在后台开发中,可以按照模块来进行处理我们的请求,对于这 ...
- 👮 Golang Gin/Ace/Iris/Echo RBAC 鉴权库
GRBAC 项目地址: https://github.com/storyicon/grbac Grbac是一个快速,优雅和简洁的RBAC框架.它支持增强的通配符并使用Radix树匹配HTTP请求.令人 ...
- 安装iris框架
1.导语 目前Go语言已经为大多数人所熟知,越来越多的开发人员选择使用Go语言来进行开发,但是如何使用 Go来进行web开发,在其他编程语言中都有对应的开发框架,当然在Go中也有,就是即将要介绍的-- ...
- 【计算机视觉】深度相机(九)--OpenNI API及中间件说明
本文由官方文档翻译而来 总览 目的 OpenNI 2.0 API(应用程序编程接口)提供了访问PrimerSense的兼容深度传感器.这就使得一个应用程序能够初始化传感器和从设备接收深度(depth) ...
- Iris路由和路由组
package main import ( "github.com/kataras/iris" "github.com/kataras/iris/context" ...
随机推荐
- @Html.ActionLink方法
Html.ActionLink:MVC提供的自动构造重写地址的方法,该方法有五个重载 1.Html.ActionLink("linkText","actionName&q ...
- Django数据查询中对字段进行排序
Django数据查询中对字段进行排序 第一种方法:使用order_by进行排序 Articlelist = Article.objects.filter(**kwargs).order_by('n ...
- requests模块高级操作之proxies
一.代理proxy 概念:代理服务器 作用:请求和响应的转发 免费代理 www.goubanjia.com 快代理 西祠代理 代理精灵(付费) 匿名度: 透明:对方服务器知道你使用代理也知道你真实ip ...
- elmentUI为table中的单元格添加事件
<el-main> <el-tabs v-model="curTab" type="card"> <!-- tab签 --> ...
- DS1302时钟
采用串行数据传送方式,SPI 3线接口 SPI总线 SPI接口是以主从方式工作的,通常有一个主器件和一个或多个从器件 MOSI – 主器件数据输出,从器件数据输入 MISO – 主器件数据输入,从器件 ...
- 【jekins】tomcat+jenkins
启动jiekins:进入tomcat安装路径下的bin文件,运行startup.bat文件 打开http://127.0.0.1:8080/jenkins 地址 一.构建github项目 原理:构建项 ...
- 翻译应用将在Win8.1系统中取消下载安装
自Windows8.Windows Phone 7.1和Windows Phone 8受到影响之后,微软又正式宣布停止对翻译应用提供支持服务.Microsoft Translator这款应用将从Win ...
- Codeforces 1175F The Number of Subpermutations
做法①:RMQ(预处理NLOGN+后续跳跃蜜汁复杂度) 满足题意的区间的条件转换: 1.长度为R-L+1则最大值也为R-L+1 2.区间内的数不重复 当RMQ(L,R)!=R-L+1时 因为已经保证了 ...
- jsp的标签库
Java Server Pages Standard Tag Libray(JSTL):JSP 标准标签库,是一个定制标签类库的集合,用于解决一些常见的问题,例如迭代一个映射或者集合.条件测试.XML ...
- BZOJ2140 稳定婚姻[强连通分量]
发现如果$B_i$和$G_j$配对,那么$B_j$又要找一个$G_k$配对,$B_k$又要找一个$G_l$配对,一直到某一个$B_x$和$G_i$配对上为止,才是不稳定的. 暴力是二分图匹配.匈牙利算 ...