From b88198f0f845e2d05431a443d0759e03fb1b2e47 Mon Sep 17 00:00:00 2001 From: RichZDS <3388214266@qq.com> Date: Thu, 5 Feb 2026 22:38:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E5=B1=80=E5=BC=82=E5=B8=B8=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/internal/cmd/cmd.go | 3 +- Backend/internal/middleware/response.go | 65 +++++++++++++++++++ .../src/api/interface/apiTypes/ApiResponse.ts | 1 + Frontend/src/views/Forum.vue | 14 +++- 4 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 Backend/internal/middleware/response.go diff --git a/Backend/internal/cmd/cmd.go b/Backend/internal/cmd/cmd.go index e68ebc9..e8a3b11 100644 --- a/Backend/internal/cmd/cmd.go +++ b/Backend/internal/cmd/cmd.go @@ -3,6 +3,7 @@ package cmd import ( "TrangleAgent/internal/controller" "TrangleAgent/internal/controller/websocket" + "TrangleAgent/internal/middleware" "context" "github.com/gogf/gf/v2/frame/g" @@ -43,7 +44,7 @@ var ( // 注册 API 路由组 s.Group("/api", func(group *ghttp.RouterGroup) { - group.Middleware(ghttp.MiddlewareHandlerResponse) + group.Middleware(middleware.ResponseHandler) controller.RegisterControllers(group) }) diff --git a/Backend/internal/middleware/response.go b/Backend/internal/middleware/response.go new file mode 100644 index 0000000..2f6151e --- /dev/null +++ b/Backend/internal/middleware/response.go @@ -0,0 +1,65 @@ +package middleware + +import ( + "net/http" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + "github.com/gogf/gf/v2/net/ghttp" +) + +// ResponseHandler custom response handler to add "err" field +func ResponseHandler(r *ghttp.Request) { + r.Middleware.Next() + + // There's custom buffer content, it then exits current handler. + if r.Response.BufferLength() > 0 { + return + } + + var ( + msg string + err error + code gcode.Code = gcode.CodeOK + res = r.GetHandlerResponse() + ) + if err = r.GetError(); err != nil { + code = gerror.Code(err) + if code == gcode.CodeNil { + code = gcode.CodeInternalError + } + msg = err.Error() + } else { + if r.Response.Status > 0 && r.Response.Status != 200 { + msg = http.StatusText(r.Response.Status) + switch r.Response.Status { + case 404: + code = gcode.CodeNotFound + case 403: + code = gcode.CodeNotAuthorized + default: + code = gcode.CodeInternalError + } + } + } + + // Custom response structure + type Response struct { + Code int `json:"code" dc:"Error code"` + Message string `json:"message" dc:"Error message"` + Data interface{} `json:"data" dc:"Result data for certain request according to model definition"` + Err string `json:"err" dc:"Error details"` + } + + errStr := "" + if err != nil { + errStr = err.Error() + } + + r.Response.WriteJson(Response{ + Code: code.Code(), + Message: msg, + Data: res, + Err: errStr, + }) +} diff --git a/Frontend/src/api/interface/apiTypes/ApiResponse.ts b/Frontend/src/api/interface/apiTypes/ApiResponse.ts index f057054..5fbcae6 100644 --- a/Frontend/src/api/interface/apiTypes/ApiResponse.ts +++ b/Frontend/src/api/interface/apiTypes/ApiResponse.ts @@ -2,4 +2,5 @@ export interface ApiResponse { code?: number; message?: string; data?: any; + err?: string; } diff --git a/Frontend/src/views/Forum.vue b/Frontend/src/views/Forum.vue index e0c2cc9..36f83c6 100644 --- a/Frontend/src/views/Forum.vue +++ b/Frontend/src/views/Forum.vue @@ -227,6 +227,11 @@ const fetchPosts = async () => { title: searchText.value || undefined }) const data = (res as any).data || res || {} + const errMsg = (res as any).err + if (errMsg) { + message.error(errMsg) + return + } posts.value = data.list || [] total.value = data.total || 0 } catch (error) { @@ -266,13 +271,20 @@ const handleCreatePost = async () => { createLoading.value = true try { - await postApiForumPostsCreate({ + const res = await postApiForumPostsCreate({ + boardId: Number("1"),//默认板块IDtodo userId: currentUserId.value, title: createForm.title, content: createForm.content, coverImage: createForm.coverImage, status: 'NORMAL' }) + const data = (res as any).data || res || {} + const errMsg = (res as any).err + if (errMsg) { + message.error(errMsg) + return + } message.success('情报发布成功') createModalVisible.value = false fetchPosts()