From 5f33e26036cb3395681e620df9b359ca61fa511e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 29 Aug 2023 16:12:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=AF=E7=94=B1=E4=B8=8A=E4=B8=8B=E6=96=87?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/utils/ctx/ctx.go | 67 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/lib/core/utils/ctx/ctx.go b/lib/core/utils/ctx/ctx.go index f3e24581..5eb29404 100644 --- a/lib/core/utils/ctx/ctx.go +++ b/lib/core/utils/ctx/ctx.go @@ -2,12 +2,29 @@ package ctx import ( "encoding/json" + "fmt" "io" "net/http" - "ems.agt/lib/global" + "ems.agt/lib/core/vo" + "github.com/gorilla/mux" ) +// Param 地址栏参数{id} +func Param(r *http.Request, key string) string { + vars := mux.Vars(r) + v, ok := vars[key] + if ok { + return v + } + return "" +} + +// GetQuery 查询参数 +func GetQuery(r *http.Request, key string) string { + return r.URL.Query().Get(key) +} + // QueryMap 查询参数转换Map func QueryMap(r *http.Request) map[string]any { queryValues := r.URL.Query() @@ -20,10 +37,56 @@ func QueryMap(r *http.Request) map[string]any { // 读取json请求结构团体 func ShouldBindJSON(r *http.Request, args any) error { - body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) + body, err := io.ReadAll(io.LimitReader(r.Body, 1<<20)) // 设置较大的长度,例如 1<<20 (1MB) if err != nil { return err } err = json.Unmarshal(body, args) return err } + +// JSON 相应json数据 +func JSON(w http.ResponseWriter, code int, data any) { + w.Header().Set("Content-Type", "application/json;charset=UTF-8") + response, err := json.Marshal(data) + if err != nil { + w.WriteHeader(500) + w.Write([]byte(err.Error())) + } else { + w.WriteHeader(code) + w.Write(response) + } +} + +/// ==== 登录用户信息, 通过中间件后预置入 + +// 定义自定义类型作为键 +type ContextKey string + +// LoginUser 登录用户信息需要Authorize中间件 +func LoginUser(r *http.Request) (vo.LoginUser, error) { + // 上下文 + v := r.Context().Value(ContextKey("LoginUser")) + if v != nil { + return v.(vo.LoginUser), nil + } + return vo.LoginUser{}, fmt.Errorf("无用户信息") +} + +// LoginUserToUserID 登录用户信息-用户ID +func LoginUserToUserID(r *http.Request) string { + loginUser, err := LoginUser(r) + if err != nil { + return "" + } + return loginUser.UserID +} + +// LoginUserToUserName 登录用户信息-用户名称 +func LoginUserToUserName(r *http.Request) string { + loginUser, err := LoginUser(r) + if err != nil { + return "" + } + return loginUser.UserName +}