diff --git a/ron.go b/ron.go index 1b057ed..6ba23fb 100644 --- a/ron.go +++ b/ron.go @@ -111,6 +111,7 @@ func (e *Engine) ServeHTTP(w http.ResponseWriter, r *http.Request) { } e.middleware = append(e.middleware, e.timeOutMiddleware()) + e.middleware = append(e.middleware, e.requestIdMiddleware()) handler = createStack(e.middleware...)(handler) rw := &responseWriterWrapper{ResponseWriter: w} handler.ServeHTTP(rw, r) @@ -157,6 +158,20 @@ func (e *Engine) timeOutMiddleware() Middleware { } } +func (e *Engine) requestIdMiddleware() Middleware { + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + id := r.Header.Get("X-Request-ID") + if id == "" { + id = fmt.Sprintf("%d", time.Now().UnixNano()) + } + ctx = context.WithValue(ctx, "requestId", id) + next.ServeHTTP(w, r.WithContext(ctx)) + }) + } +} + func (e *Engine) USE(middleware Middleware) { e.middleware = append(e.middleware, middleware) }