ホームページ  >  記事  >  バックエンド開発  >  シングルページ Web アプリケーションの Go の静的ファイル サーバーで 404 エラーを処理するにはどうすればよいですか?

シングルページ Web アプリケーションの Go の静的ファイル サーバーで 404 エラーを処理するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-28 01:16:02137ブラウズ

How to Handle 404 Errors in Go's Static File Server for Single-Page Web Applications?

カスタム ファイル サーバーでの 404 エラーの処理

単一ページの Web アプリケーションでは、不足しているファイルを適切に処理して、スムーズなユーザーエクスペリエンス。 Go の静的ファイル サーバー http.FileServer() を使用する場合、404 エラーの処理をカスタマイズできます。

http.FileServer() のデフォルトの動作は、存在しないファイルに対して 404 Not Found 応答を返します。このようなリクエストをカスタム ページ (index.html など) にリダイレクトするには、ラッパー ハンドルを作成できます。

ラッパー レスポンス ライターの作成

ラッパー レスポンス ライターは次の検査を行います。 http.FileServer() ハンドラーによって返されるステータス コード。 404 を検出すると、応答の送信を抑制し、代わりにリダイレクトの準備をします。

<code class="go">type NotFoundRedirectRespWr struct {
    http.ResponseWriter // Embed http.ResponseWriter
    status              int
}

func (w *NotFoundRedirectRespWr) WriteHeader(status int) {
    w.status = status // Store the status for our own use
    if status != http.StatusNotFound {
        w.ResponseWriter.WriteHeader(status)
    }
}

func (w *NotFoundRedirectRespWr) Write(p []byte) (int, error) {
    if w.status != http.StatusNotFound {
        return w.ResponseWriter.Write(p)
    }
    return len(p), nil // Lie that we successfully written it
}</code>

ファイル サーバー ハンドラーのラップ

ラッパー ハンドラーは NotFoundRedirectRespWr を使用して、 404 エラーを検出します。

<code class="go">func wrapHandler(h http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        nfrw := &NotFoundRedirectRespWr{ResponseWriter: w}
        h.ServeHTTP(nfrw, r)
        if nfrw.status == 404 {
            log.Printf("Redirecting %s to index.html.", r.RequestURI)
            http.Redirect(w, r, "/index.html", http.StatusFound)
        }
    }
}</code>

使用法

main 関数では、元の http.FileServer() ハンドラーの代わりにラップされたハンドラーが使用されます。

<code class="go">func main() {
    fs := wrapHandler(http.FileServer(http.Dir(".")))
    http.HandleFunc("/", fs)
    panic(http.ListenAndServe(":8080", nil))
}</code>

結果

これで、存在しないファイルへのリクエストは /index.html にリダイレクトされます。ログには次のように表示されます。

Redirecting /a.txt3 to /index.html.
Redirecting /favicon.ico to /index.html.

このカスタマイズにより、静的ファイルの提供での 404 エラーの柔軟な処理が可能になり、単一ページの Web アプリケーションでのユーザー エクスペリエンスが向上します。

以上がシングルページ Web アプリケーションの Go の静的ファイル サーバーで 404 エラーを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。