gin框架(2) | 青训营笔记

102 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天.

路由的重定向

router的重定向非常的简单,就是把布置在主函数里的路由抽离出来,形成新的函数,就可以进行路由的重定向了

首先是主函数的代码

package main

import (
	"TikTok/dao"
	"github.com/gin-gonic/gin"
)

func main() {
	
	r := gin.Default()
	
	initRouter(r)
	
	r.Run(":8080")
}

初始化路由的代码

package main

import (
	"TikTok/controller"

	"github.com/gin-gonic/gin"
)

func initRouter(r *gin.Engine) {
	apiRouter := r.Group("/douyin")
	go apiRouter.GET("/user/", controller.UserInfo)
	go apiRouter.POST("/user/register/", controller.Register)
	go apiRouter.POST("/user/login/", controller.Login)
}

运用表单传输数据

表单传输为post请求,http常见的传输格式为四种:

  1. application/json
  2. application/x-www-form-urlencoded
  3. application/xml
  4. multipart/form-data
  5. 表单参数可以通过PostForm()方法获取,该方法默认解析的是x-www-form-urlencoded或from-data格式的参数

中间件

Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。

定义中间件

func Auth() gin.HandlerFunc {
	return func(context *gin.Context) {
		
		context.Set("userId", 998244353)
		context.Next()
	}
}

为全局路由设置中间件 Gin中的中间件必须是一个gin.HandlerFunc类型。Gin允许设置多个中间件

package main

import (
	"TikTok/controller"

	"github.com/gin-gonic/gin"
)

func initRouter(r *gin.Engine) {
	r.Use(Auth())
	apiRouter := r.Group("/douyin")
	go apiRouter.GET("/user/", controller.UserInfo)
	go apiRouter.POST("/user/register/", controller.Register)
	go apiRouter.POST("/user/login/", controller.Login)
}

为单个路由设置中间件

package main

import (
	"TikTok/controller"

	"github.com/gin-gonic/gin"
)

func initRouter(r *gin.Engine) {
	//r.Use(Auth())
	apiRouter := r.Group("/douyin")
	go apiRouter.GET("/user/",Auth(), controller.UserInfo)
	go apiRouter.POST("/user/register/", controller.Register)
	go apiRouter.POST("/user/login/", controller.Login)
}

gin.Default()默认使用了Logger和Recovery中间件,其中:Logger中间件将日志写入gin.DefaultWriter,即使配置了GIN_MODE=release。

Recovery中间件会recover任何panic。如果有panic的话,会写入500响应码。如果不想使用上面两个默认的中间件,可以使用gin.New()新建一个没有任何默认中间件的路由。