質問: 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 中国語 Web サイトの他の関連記事を参照してください。