Iris路由和路由组

Posted yzg-14

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Iris路由和路由组相关的知识,希望对你有一定的参考价值。

package main

import (
	"github.com/kataras/iris"
	"github.com/kataras/iris/context"
)

func main() {

	app := iris.New()

	//1.handle方式处理请求
	//同一用来处理请求的方法
	//GET
	app.Handle("GET", "/userinfo", func(context context.Context) {
		path := context.Path()
		app.Logger().Info(path)
		app.Logger().Error(" request path :", path)
	})

	//post
	app.Handle("POST", "/postcommit", func(context context.Context) {
		path := context.Path()
		app.Logger().Info(" post reuqest, the url is : ", path)
		context.html(path)
	})

	//正则表达式:{name}
	app.Get("/weather/{date}/{city}", func(context context.Context) {
		path := context.Path()
		//使用:context.Params().Get("name") 获取正则表达式变量
		date := context.Params().Get("date")
		city := context.Params().Get("city")
		context.WriteString(path + "  , " + date + " , " + city)
	})

	//1.Get 正则表达式 路由
	//使用:context.Params().Get("name") 获取正则表达式变量
	//正则表达式:{name}
	app.Get("/hello/{name}", func(context context.Context) {
		//获取变量
		path := context.Path()

		app.Logger().Info(path)
		//获取正则表达式变量内容值
		name := context.Params().Get("name")
		context.HTML("<h1>" + name + "</h1>")
	})


	//2.自定义正则表达式变量路由请求 {unit64:uint64}进行变量类型限制
	app.Get("/api/users/{userid:uint64}", func(context context.Context) {
		userID, err := context.Params().GetUint("userid")

		if err != nil {
			//设置请求状态码,状态码可以自定义
			context.JSON(map[string]interface{}{
				"requestcode": 201,
				"message":     "bad request",
			})
			return
		}

		context.JSON(map[string]interface{}{
			"requestcode": 200,
			"user_id":     userID,
		})
	})

	//自定义正则表达式路由请求 bool
	//api/users/true
	app.Get("/api/users/{isLogin:bool}", func(context context.Context) {
		isLogin, err := context.Params().GetBool("isLogin")
		if err != nil {
			context.StatusCode(iris.StatusNonAuthoritativeInfo)
			return
		}
		if isLogin {
			context.WriteString(" 已登录 ")
		} else {
			context.WriteString(" 未登录 ")
		}

		//正则表达式所支持的数据类型
		//context.Params().GetBool() //Getxxx()
	})

	app.Run(iris.Addr(":8002"), iris.WithoutServerError(iris.ErrServerClosed))

}
package main

import (
	"github.com/kataras/iris"
	"github.com/kataras/iris/context"
)

func main() {

	app := iris.New()

	//用户模块users
	//xxx/users/register 注册
	//xxx/users/login 登录
	//xxx/users/info 获取用户信息

	//路由组请求
	userParty := app.Party("/users", func(context context.Context) {
		//处理下一级请求,就是users斜杠后面的
		context.Next()
	})
	//路由组下面的下一级请求
	//xxx/users/register
	userParty.Get("/register", func(context context.Context) {
		app.Logger().Info("用户注册功能")
		context.HTML("<h1>用户注册功能</h1>")
	})

	//路由组下面的下一级请求
	//xxx/users/login
	userParty.Get("/login", func(context context.Context) {
		app.Logger().Info("用户登录功能")
		context.HTML("<h1>用户登录功能</h1>")
	})

	//另一种方式
	usersRouter := app.Party("/admin", userMiddleware)

	//Done方法,表示请求结束
	usersRouter.Done(func(context context.Context) {
		context.Application().Logger().Infof("response sent to " + context.Path())
	})

	usersRouter.Get("/info", func(context context.Context) {
		context.HTML("<h1> 用户信息 </h1>")
		context.Next() //手动显示调用,去调用Done方法
	})

	usersRouter.Get("/query", func(context context.Context) {
		context.HTML("<h1> 查询信息 </h1>")
	})

	app.Run(iris.Addr(":8003"), iris.WithoutServerError(iris.ErrServerClosed))
}

//另一种方式
//用户路由中间件
func userMiddleware(context iris.Context) {
	context.Next()
}

  

  

以上是关于Iris路由和路由组的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置

从PHP Laravel 到 Go Iris--路由篇

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

滚动经过片段时,Angular 10会获得路由器活动片段吗?

Laravel 从子路由设置父路由组参数