Files
lingye-gin-gorm/src/middleware/gin_router.go
T
2021-04-28 17:18:32 +08:00

118 lines
2.7 KiB
Go

package middleware
import (
"fmt"
"github.com/gin-gonic/gin"
"lingye-gin/src/config"
"lingye-gin/src/rest"
"strings"
)
type GinRouter struct {
}
func (v GinRouter) Init(r *gin.Engine) {
config.Logger.Info("GinRouter Init")
// 全局异常拦截器
r.Use(GinPanic)
// 一般路由映射关系
groupMap := make(map[string]*gin.RouterGroup)
// api路由映射关系
apiUrls := make([]rest.RequestApi, 0)
// api组名称
apiGroupName := "api"
for _, normalRa := range rest.Urls {
// 判断是否在某一组下
if strings.Compare(normalRa.GroupName, "") == 0 {
// 批量处理
if handle(normalRa, r) {
continue
}
} else {
// 分组名称
groupName := fmt.Sprintf("/%s", normalRa.GroupName)
// api组, 基于jwt验证
if strings.Compare(normalRa.GroupName, apiGroupName) == 0 {
apiUrls = append(apiUrls, normalRa)
continue
}
// 分组不存在
if groupMap[normalRa.GroupName] == nil {
if normalRa.GroupHandleFunction == nil {
// 不存在分组过滤器
groupMap[normalRa.GroupName] = r.Group(groupName)
} else {
groupMap[normalRa.GroupName] = r.Group(groupName, normalRa.GroupHandleFunction)
}
}
// 批量处理
if handleGroup(normalRa, groupMap[normalRa.GroupName]) {
continue
}
}
}
for _, apiRa := range apiUrls {
jwtR := r.Group(apiGroupName)
jwtR.Use(config.JwtHandle)
// 批量处理
if handleGroup(apiRa, jwtR) {
continue
}
}
config.Logger.Info("GinRouter Ok")
}
func handle(request rest.RequestApi, engine *gin.Engine) bool {
// get
if strings.Compare(request.Mode, "get") == 0 {
engine.GET(request.RelativePath, request.HandleFunction)
return true
}
// post
if strings.Compare(request.Mode, "post") == 0 {
engine.POST(request.RelativePath, request.HandleFunction)
return true
}
// delete
if strings.Compare(request.Mode, "delete") == 0 {
engine.DELETE(request.RelativePath, request.HandleFunction)
return true
}
// put
if strings.Compare(request.Mode, "put") == 0 {
engine.PUT(request.RelativePath, request.HandleFunction)
return true
}
return false
}
func handleGroup(request rest.RequestApi, group *gin.RouterGroup) bool {
// get
if strings.Compare(request.Mode, "get") == 0 {
group.GET(request.RelativePath, request.HandleFunction)
return true
}
// post
if strings.Compare(request.Mode, "post") == 0 {
group.POST(request.RelativePath, request.HandleFunction)
return true
}
// delete
if strings.Compare(request.Mode, "delete") == 0 {
group.DELETE(request.RelativePath, request.HandleFunction)
return true
}
// put
if strings.Compare(request.Mode, "put") == 0 {
group.PUT(request.RelativePath, request.HandleFunction)
return true
}
return false
}