duanji1610 2018-11-13 01:39
浏览 1471

如何在golang中间件中获取Response statusCode?

How do I get Response statusCode in golang middleware?

ResponseWriter have only WriteHeader interface, I can't find get interface.

  • 写回答

1条回答 默认 最新

  • doukezi4576 2018-11-13 02:31
    关注

    This method is feasible.

        type loggingResponseWriter struct {
            http.ResponseWriter
            statusCode int
        }
    
        func NewLoggingResponseWriter(w http.ResponseWriter) *loggingResponseWriter {
            return &loggingResponseWriter{w, http.StatusOK}
        }
    
        func (lrw *loggingResponseWriter) WriteHeader(code int) {
            lrw.statusCode = code
            lrw.ResponseWriter.WriteHeader(code)
        }
    
        func wrapHandlerWithLogging(wrappedHandler http.Handler) http.Handler {
            return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
                log.Printf("--> %s %s", req.Method, req.URL.Path)
    
                lrw := NewLoggingResponseWriter(w)
                wrappedHandler.ServeHTTP(lrw, req)
    
                statusCode := lrw.statusCode
                log.Printf("<-- %d %s", statusCode, http.StatusText(statusCode))
            })
        }
    
    评论

报告相同问题?