golang iris mysql_golang iris使用
安装irisgo get github.com/kataras/iris
实例
注册一个route到服务的APIapp := iris.New()
app.Handle("GET", "/ping", func(ctx iris.Context) {
ctx.JSON(iris.Map{"message": "pong"})
})
app.Run(iris.Addr(":8080"))
几行代码就可以实现,通过浏览器访问http://localhost:8080/ping会返回{"message":"pong"}
使用Handle函数可以注册方法,路径和对应的处理函数
添加middleware
如果我们希望记录下所有的请求的log信息还希望在调用相应的route时确认请求的UA是否是我们允许的可以通过Use函数添加相应的middlewarepackage main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/middleware/logger"
)
func main() {
app := iris.New()
app.Use(logger.New())
app.Use(checkAgentMiddleware)
app.Handle("GET", "/ping", func(ctx iris.Context) {
ctx.JSON(iris.Map{"message": "pong"})
})
app.Run(iris.Addr(":8080"))
}
func checkAgentMiddleware(ctx iris.Context) {
ctx.Application().Logger().Infof("Runs before %s", ctx.Path())
user_agent := ctx.GetHeader("User-Agent")
if user_agent != "pingAuthorized" {
ctx.JSON("No authorized for ping")
return
}
ctx.Next()
}
使用postman访问在Header中添加User-Agent访问/ping可以正常返回结果,如果去掉User-Agent则会返回我们设定的"No authorized for ping"。因为我们添加了iris的log middleware所以在访问时会在终端显示相应的log信息
取得请求参数,展示到html
bookinfo.html
{{ .bookName }}
{{ .bookID }}
{{ .author }}
{{ .chapterCount }}
main.gopackage main
import "github.com/kataras/iris"
func main() {
app := iris.New()
app.RegisterView(iris.HTML("./views", ".html"))
app.Handle("GET", "/bookinfo/{bookid:string}", func(ctx iris.Context) {
bookID := ctx.Params().GetString("bookid")
ctx.ViewData("bookName", "Master iris")
ctx.ViewData("bookID", bookID)
ctx.ViewData("author", "Iris expert")
ctx.ViewData("chapterCount", "40")
ctx.View("bookinfo.html")
})
app.Run(iris.Addr(":8080"))
}
取得请求中带的参数
ctx.Params().GetString("bookid")
设置html中变量的值
ctx.ViewData(key, value)
route允许和禁止外部访问
实际使用中有时会有些route只能内部使用,对外访问不到。
可以通过使用 XXX_route.Method = iris.MethodNone设定为offline
内部调用通过使用函数 Context.Exec("NONE", "/XXX_yourroute")
main.gopackage main
import "github.com/kataras/iris"
import "strings"
func main() {
app := iris.New()
magicAPI := app.Handle("NONE", "/magicapi", func(ctx iris.Context) {
if ctx.GetCurrentRoute().IsOnline() {
ctx.Writef("I'm back!")
} else {
ctx.Writef("I'll be back")
}
})
app.Handle("GET", "/onoffhandler/{method:string}/{state:string}", func(ctx iris.Context) {
changeMethod := ctx.Params().GetString("method")
state := ctx.Params().GetString("state")
if changeMethod == "" || state == "" {
return
}
if strings.Index(magicAPI.Path, changeMethod) == 1 {
settingState := strings.ToLower(state)
if settingState == "on" || settingState == "off" {
if strings.ToLower(state) == "on" && !magicAPI.IsOnline() {
magicAPI.Method = iris.MethodGet
} else if strings.ToLower(state) == "off" && magicAPI.IsOnline() {
magicAPI.Method = iris.MethodNone
}
app.RefreshRouter()
ctx.Writef("\n Changed magicapi to %s\n", state)
} else {
ctx.Writef("\n Setting state incorrect(\"on\" or \"off\") \n")
}
}
})
app.Handle("GET", "/execmagicapi", func(ctx iris.Context) {
ctx.Values().Set("from", "/execmagicapi")
if !magicAPI.IsOnline() {
ctx.Exec("NONE", "/magicapi")
} else {
ctx.Exec("GET", "/magicapi")
}
})
app.Run(iris.Addr(":8080"))
}
测试:
<1>访问http://localhost:8080/magicapi,返回Not found。说明route magicapi对外无法访问
<2>访问http://localhost:8080/execmagicapi,返回I'll be back。在execmagicapi处理函数中会执行 ctx.Exec("GET", "/magicapi")调用offline的route magicapi。在magicapi中会判断自己是否offline,如果为offline则返回I'll be back。
<3>访问http://localhost:8080/onoffhandler/magicapi/on改变magicapi为online
<4>再次访问http://localhost:8080/magicapi,返回I'm back!。说明route /mabicapi已经可以对外访问了
grouping route
在实际应用中会根据实际功能进行route的分类,例如users,books,community等。
/users/getuserdetail
/users/getusercharges
/users/getuserhistory
/books/bookinfo
/books/chapterlist
对于这类route可以把他们划分在users的group和books的group。对该group会有共通的handler处理共同的一些处理package main
import (
"time"
"github.com/kataras/iris"
"github.com/kataras/iris/middleware/basicauth"
)
func bookInfoHandler(ctx iris.Context) {
ctx.HTML("
Calling bookInfoHandler
")
ctx.HTML("
bookID:" + ctx.Params().Get("bookID"))
ctx.Next()
}
func chapterListHandler(ctx iris.Context) {
ctx.HTML("
Calling chapterListHandler
")
ctx.HTML("
bookID:" + ctx.Params().Get("bookID"))
ctx.Next()
}
func main() {
app := iris.New()
authConfig := basicauth.Config{
Users: map[string]string{"bookuser": "testabc123"},
Realm: "Authorization required",
Expires: time.Duration(30) * time.Minute,
}
authentication := basicauth.New(authConfig)
books := app.Party("/books", authentication)
books.Get("/{bookID:string}/bookinfo", bookInfoHandler)
books.Get("/chapterlist/{bookID:string}", chapterListHandler)
app.Run(iris.Addr(":8080"))
}
上例中使用了basicauth。对所有访问books group的routes都会先做auth认证。认证方式是username和password。
在postman中访问 http://localhost:8080/books/sfsg3234/bookinfo
设定Authorization为Basic Auth,Username和Password设定为程序中的值,访问会正确回复。否则会回复Unauthorized
有疑问加站长微信联系(非本文作者)
golang iris mysql_golang iris使用相关推荐
- 【golang】golang初始化项目(iris下载与使用)
1.初始化过程 1.1 进入iris官网 iris官网 //iris中文网 iris中文网 1.2 开启go module set GO111MODULE=on //windows export GO ...
- 【GO+Iris】Iris框架初识
前言 关于Iris 安装Iris Host HTTP/2和安全 任意iris.Runner host配置 多个主机 优雅的关闭 带有TLS地自动公共域名 app.Run的第二个参数 使用配置 自定义值 ...
- InterSystems IRIS 和 IRIS for Health 2021.2 预览版发布
InterSystems IRIS.IRIS for Health 以及 HealthShare Health Connect 的 2021.2 版本的预览版现已发布. 由于这是一个预览版,我们希望在 ...
- InterSystems IRIS、IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现在已经发布!...
由于这是一个预览版,我们渴望在下个月的通用版发布之前了解您对这个新版本的经验.请通过开发者社区分享您的反馈,以便我们能够共同打造一个更好的产品.预览版,我们渴望在下个月的通用版发布之前了解您对这个新版 ...
- InterSystems IRIS、IRIS for Health和Health Connect 2021.1预览版现已发布
InterSystems IRIS.IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现已发布. 由于这是一个预览版,我们希望在下个月的通用 ...
- golang后台管理系统Iris+Layui框架搭建教程
项目介绍 一款 Go 语言基于Iris.Layui.MySQL等框架精心打造的一款模块化.高性能.企业级的敏捷开发框架,本着简化开发.提升开发效率的初衷触发,框架自研了一套个性化的组件,实现了可插拔的 ...
- 【Golang】安装 iris 的方法
根据 iris 在 github 上的官方文档,结合自己在安装时的过程,现在总结一下 iris 的安装方法. 1. 创建工作目录 mkdir myapp 2. 进入工作目录 cd myapp 3. 初 ...
- InterSystems IRIS 和 IRIS for Health 2021.2 正式发布!
InterSystems 数据平台团队非常高兴地宣布,InterSystems IRIS数据平台.InterSystems IRIS for Health和HealthShare Health Con ...
- iris文件服务器,iris 网络
iris 网络 内容精选 换一换 学件项目中预置了样例数据,因此<学件开发指南>使用预置样例数据,讲解学件的操作流程.如果用户需要使用自己的数据,可以参考新建数据集和导入数据,创建新的数据 ...
最新文章
- 推荐系统算法工程师培养计划:博导级教研团队,原理教学、项目实践、大厂内推的一站式培训...
- React性能优化 PureComponent
- Linux运维系统工程师与java基础学习系列-6
- Android--使用VideoView播放视频
- 该文件没有与之关联的程序来执行该操作_Liunx tty子系统分析之三 tty字符设备文件操作接口说明...
- 电子计算机的基本结构基于存储程序思想是由,计算机应用基础第一章复习题
- Eclipse 中最常用的快捷键大全
- 计算机毕业设计ssm电影院售票系统java项目mysql数据库
- 计算机 控制面板都打不开怎么办,控制面板打不开怎么办?控制面板打开办法大全...
- ThreadLocal的介绍与使用
- Flashpaper序列号(Flashpaperamp;nbs…
- 环境变量(PATH)的那些事
- live2d_Live2D解锁丨SR羁绊复刻,生日定制服装上架!
- 微信小程序开发:Java后台MySQL数据库微信小程序页面
- 戴尔服务器虚拟 介质,使用Dell R710 IDRAC挂载虚拟介质
- 软考准备之系统开发与运行(错题及重要知识点)
- jsp做的留言系统(防止非法登录、增删改查留言)
- java变量无法解析出现的原因_不明白为什么这个变量无法解析为一个类型? (JAVA)...
- 朗伯辐射强度模型MATLAB,基于室内非定向的可见光通信系统的朗伯光源阶数优化...
- V4L2框架-videobuf2
热门文章
- Vue 引入Ueditor修改样式仿照Word文档
- 2022-2028全球及中国监管技术(RegTech)行业研究及十四五规划分析报告
- Centos 服务器禁止 IP访问/ IP黑名单
- 大数据量数据库设计与优化方案
- 微信小程序(手机登录60S倒计时+微信登录页面+限制时间次数频率)
- x86android刺激战场,OPPO Find X 游戏实测:未来旗舰 实力强悍如斯
- Vue(动画、过渡、动画库)
- 直播推荐、搜索中的召回、相关性、多目标精排 - 相关性篇
- 中睿天下魏海宇受邀出席2022网络安全创新发展高峰论坛并发表主题演讲
- 同城跑腿系统搭建,灵活的配送选择满足更多场景