feat: mux路由封装兼容gin的ctx工具

This commit is contained in:
TsMask
2024-03-18 11:02:21 +08:00
parent c3881a7ba0
commit d8615353ae

View File

@@ -14,6 +14,7 @@ import (
commonConstants "be.ems/src/framework/constants/common" commonConstants "be.ems/src/framework/constants/common"
tokenConst "be.ems/src/framework/constants/token" tokenConst "be.ems/src/framework/constants/token"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"golang.org/x/text/language"
) )
// Param 地址栏参数{id} // Param 地址栏参数{id}
@@ -31,6 +32,11 @@ func GetQuery(r *http.Request, key string) string {
return r.URL.Query().Get(key) return r.URL.Query().Get(key)
} }
// GetHeader 请求头参数
func GetHeader(r *http.Request, key string) string {
return r.Header.Get(key)
}
// QueryMap 查询参数转换Map // QueryMap 查询参数转换Map
func QueryMap(r *http.Request) map[string]any { func QueryMap(r *http.Request) map[string]any {
queryValues := r.URL.Query() queryValues := r.URL.Query()
@@ -41,6 +47,16 @@ func QueryMap(r *http.Request) map[string]any {
return queryParams return queryParams
} }
// ShouldBindQuery 查询参数读取json请求结构团体
func ShouldBindQuery(r *http.Request, args any) error {
queryParams := QueryMap(r)
body, err := json.Marshal(queryParams)
if err != nil {
return err
}
return json.Unmarshal(body, args)
}
// 读取json请求结构团体 // 读取json请求结构团体
func ShouldBindJSON(r *http.Request, args any) error { func ShouldBindJSON(r *http.Request, args any) error {
body, err := io.ReadAll(io.LimitReader(r.Body, 1<<20)) // 设置较大的长度,例如 1<<20 (1MB) body, err := io.ReadAll(io.LimitReader(r.Body, 1<<20)) // 设置较大的长度,例如 1<<20 (1MB)
@@ -118,7 +134,32 @@ func Authorization(r *http.Request) string {
return arr[1] return arr[1]
} }
// 定义自定义类型作为键 // AcceptLanguage 解析客户端接收语言 zh中文 en: 英文
func AcceptLanguage(r *http.Request) string {
preferredLanguage := language.English
// Query请求查询
if v := GetQuery(r, "language"); v != "" {
tags, _, _ := language.ParseAcceptLanguage(v)
if len(tags) > 0 {
preferredLanguage = tags[0]
}
}
// Header请求头
if v := GetHeader(r, "Accept-Language"); v != "" {
tags, _, _ := language.ParseAcceptLanguage(v)
if len(tags) > 0 {
preferredLanguage = tags[0]
}
}
// 只取前缀
lang := preferredLanguage.String()
arr := strings.Split(lang, "-")
return arr[0]
}
// ContextKey 定义自定义类型作为键
type ContextKey string type ContextKey string
// LoginUser 登录用户信息需要Authorize中间件 // LoginUser 登录用户信息需要Authorize中间件