Bagaimanakah Saya Boleh Menyesuaikan Pengendalian Ralat 404 untuk Pelayan Fail Go Statik?

Mary-Kate Olsen
Lepaskan: 2024-10-28 02:09:31
asal
881 orang telah melayarinya

How Can I Customize the 404 Error Handling for a Go Static File Server?

Memperibadikan Fail Tidak Ditemui Pengendalian dalam Pelayan Fail Statik Go

Apabila menyiarkan fail statik dalam Go menggunakan http.FileServer(), biasanya fail tidak ditemui kembalikan kod status 404. Untuk menyesuaikan tingkah laku ini dan menyediakan halaman tertentu sebaliknya, kami perlu membalut pengendali http.FileServer().

Mencipta Pembalut Pengendali HTTP Tersuai

Kami mencipta pembungkus http.ResponseWriter tersuai (NotFoundRedirectRespWr) untuk memintas kod status yang dikembalikan oleh pengendali pelayan fail. Apabila status adalah 404, kami menghalang respons daripada dihantar dan mengubah hala permintaan ke halaman tertentu (dalam kes ini, /index.html).

<code class="go">type NotFoundRedirectRespWr struct {
    http.ResponseWriter // We 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>
Salin selepas log masuk

Membungkus Pengendali Pelayan Fail

Seterusnya, kami membalut pengendali http.FileServer() menggunakan fungsi wrapHandler tersuai kami. Fungsi ini menambahkan penulis respons tersuai kami pada rantai pengendali. Jika status respons ialah 404, kami mengubah hala ke /index.html.

<code class="go">func wrapHandler(h http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        nfrw := &amp;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>
Salin selepas log masuk

Penggunaan

Untuk menggunakan pengendali tersuai kami, kami menggantikan http.FileServer asal () pengendali dengan pengendali berbalut kami dalam fungsi utama kami:

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

Kini, sebarang fail yang tidak ditemui akan mencetuskan pengendali tersuai kami dan mengubah hala ke /index.html. Ini memberikan pengalaman yang lebih mesra pengguna untuk aplikasi web satu halaman.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan Pengendalian Ralat 404 untuk Pelayan Fail Go Statik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!