问题:如何将 Go 中间件模式与返回的请求处理程序结合起来错误?
答案:
Go 中的中间件模式允许创建可应用于 HTTP 处理程序的可重用组件。然而,传统的中间件函数本身并不处理错误。
要在中间件中启用错误处理,建议使用专门用于此目的的单独中间件函数。此函数应放置在中间件链的末尾,并处理链内处理程序返回的错误。
// Pattern for a middleware function that checks for errors from the next handler. func errorHandler(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { err := next.ServeHTTP(w, r) if err != nil { // Handle the error, e.g., by logging or returning an appropriate HTTP response. } }) }
示例:
组合错误 -使用原始示例中的日志记录中间件返回处理程序:
type errorHandler func(http.ResponseWriter, *http.Request) error // Create a special error-aware logging middleware. func loggingWithErrorHandler(next errorHandler) errorHandler { return func(w http.ResponseWriter, r *http.Request) error { // Before executing the handler. start := time.Now() log.Printf("Started %s %s", r.Method, r.URL.Path) err := next(w, r) // After executing the handler. log.Printf("Completed %s in %v", r.URL.Path, time.Since(start)) return err } } // Define an error-returning handler func. func errorHandlerFunc(w http.ResponseWriter, r *http.Request) error { w.Write([]byte("Hello World from errorHandlerFunc!")) return nil } // Assemble the middleware chain and error-aware middleware. http.Handle("/", loggingWithErrorHandler(errorHandlerFunc))
此组合允许在保留错误处理的同时进行错误处理中间件模式的好处。包装的错误感知中间件将处理包装的处理程序返回的任何错误。
以上是Go中间件链错误如何处理?的详细内容。更多信息请关注PHP中文网其他相关文章!