【问题标题】:Go chi middleware to add item to response headerGo chi 中间件将项目添加到响应标头
【发布时间】:2021-07-09 17:22:29
【问题描述】:

我的概念很简单,我想将请求ID(由chi middleware.RequestID生成到响应头)。

我下面的代码添加了X-Request-Id,但没有添加 ID 本身。我不知道为什么,因为它在上下文中肯定是可用的,因为middleware.RequestID 在中间件链中更高?

我的路由器创建:

package rest

import (
    "time"

    "github.com/go-chi/chi/v5"
    "github.com/go-chi/chi/v5/middleware"
    "goWebAPI/pkg/database"
    "goWebAPI/pkg/rest/mw"
    "goWebAPI/pkg/rest/routes"
)

func GetRouter(db *database.Database) *chi.Mux {
    r := chi.NewRouter()
    r.Use(middleware.RequestID)
    r.Use(mw.SendRequestID)
    r.Use(middleware.RealIP)
    r.Use(middleware.Logger)
    r.Use(middleware.Recoverer)
    r.Use(middleware.Timeout(60 * time.Second))
    r.Get("/", routes.IndexRoute())
    return r
}

我的自定义中间件:

package mw

import (
    "context"
    "net/http"

    "github.com/go-chi/chi/v5/middleware"
)

const requestIDHeader = "X-Request-Id"

func SendRequestID(next http.Handler) http.Handler {
    fn := func(w http.ResponseWriter, r *http.Request) {
        ctx := r.Context()
        if w.Header().Get(requestIDHeader) == "" {
            w.Header().Add(
                requestIDHeader,
                middleware.GetReqID(context.Background()),
            )
        }
        next.ServeHTTP(w, r.WithContext(ctx))
    }
    return http.HandlerFunc(fn)
}

我的索引路线:

package routes

import "net/http"

func IndexRoute() http.HandlerFunc {
    fn:= func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("welcome"))
    }
    return fn
}

【问题讨论】:

  • 根据您的描述,middleware.GetReqID 正在返回空字符串

标签: go go-chi


【解决方案1】:

我相信您的问题在这里:

middleware.GetReqID(context.Background())

这会尝试获取新的空上下文的请求 ID,而您需要的是当前请求的请求 ID,这意味着它应该是:

middleware.GetReqID(r.Context)

(或者,由于您已经在本地 ctx 中获取请求上下文,您也可以使用它。)

这是documented in GetReqId(强调我的):

GetReqID 返回一个来自给定上下文的请求 ID(如果存在)。如果找不到请求 ID,则返回空字符串。

【讨论】:

    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2019-09-05
    相关资源
    最近更新 更多