feat: mux路由封装兼容gin的ctx工具
This commit is contained in:
@@ -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中间件
|
||||||
|
|||||||
Reference in New Issue
Block a user