From 9853b6fc1bda74a1e0c7b279c52673e84f1e81c2 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 10 Jun 2026 10:01:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=AF=E5=8A=A8=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/app/app.go | 7 +------ internal/transport/http/router.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/internal/app/app.go b/internal/app/app.go index a5727e1..840d6a3 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -48,7 +48,6 @@ import ( "github.com/yan1h/agent-coding-workflow/internal/project" runmod "github.com/yan1h/agent-coding-workflow/internal/run" httpx "github.com/yan1h/agent-coding-workflow/internal/transport/http" - "github.com/yan1h/agent-coding-workflow/internal/transport/http/middleware" "github.com/yan1h/agent-coding-workflow/internal/user" "github.com/yan1h/agent-coding-workflow/internal/workspace" ) @@ -112,13 +111,9 @@ func New(ctx context.Context, cfg *config.Config, dist embed.FS) (*App, error) { return db.HealthCheck(req.Context(), pool) }, SPAHandler: spaHandler, + Logger: log, }) - // chi.Router 接口本身已经声明 Use,无需类型断言到 *chi.Mux。 - r.Use(middleware.RequestID) - r.Use(middleware.Recover(log)) - r.Use(middleware.Logger(log)) - // userSvc 直接满足 middleware.SessionResolver(ResolveSession 同名同签名)。 user.NewHandler(userSvc).Mount(r) notify.NewHandler(notifyRepo, userSvc).Mount(r) diff --git a/internal/transport/http/router.go b/internal/transport/http/router.go index 132a4ee..3246532 100644 --- a/internal/transport/http/router.go +++ b/internal/transport/http/router.go @@ -4,6 +4,9 @@ import ( "net/http" "github.com/go-chi/chi/v5" + "log/slog" + + "github.com/yan1h/agent-coding-workflow/internal/transport/http/middleware" ) // RouterDeps bundles the dependencies needed to assemble the router. @@ -20,6 +23,8 @@ type RouterDeps struct { // SPAHandler 为 nil 时禁用前端 fallback;非 nil 时挂到 chi NotFound, // 把未匹配的请求交给 SPA handler 处理(静态文件 + index.html 回退)。 SPAHandler http.Handler + // Logger 用于 Recover 和 Logger 中间件。为 nil 时跳过日志相关中间件。 + Logger *slog.Logger } // NewRouter builds the application's chi.Router with the standard @@ -29,6 +34,13 @@ type RouterDeps struct { func NewRouter(deps RouterDeps) chi.Router { r := chi.NewRouter() + // 所有中间件必须在注册路由之前添加(chi 的强制要求)。 + r.Use(middleware.RequestID) + if deps.Logger != nil { + r.Use(middleware.Recover(deps.Logger)) + r.Use(middleware.Logger(deps.Logger)) + } + r.Get("/healthz", func(w http.ResponseWriter, req *http.Request) { if deps.HealthCheck != nil { if err := deps.HealthCheck(req); err != nil {