Mendiagnosis Ralat 404 dengan Penyajian Fail HTTP
Dalam aplikasi HTTP, adalah penting untuk mengendalikan ralat dengan berkesan untuk memberikan pengalaman pengguna yang boleh dipercayai. Apabila menyampaikan fail menggunakan http.FileServer, permintaan yang tidak dijangka untuk fail yang tidak wujud boleh timbul, menyebabkan konsol pelayan tidak mempunyai log ralat.
Untuk menangani perkara ini, kami boleh melanjutkan fungsi pengendali yang disediakan oleh http.StripPrefix() dan http .FileServer(). Dengan memasukkan pengendali ini dalam logik tersuai kami, kami memperoleh keupayaan untuk memintas respons HTTP dan memeriksa kod status mereka.
Untuk mencapai ini, kami memerlukan kaedah untuk menangkap kod status respons, kerana ia tidak boleh diakses secara langsung dengan http.ResponseWriter. Kami memperkenalkan pembungkus, StatusRespWr, yang membenamkan http.ResponseWriter dan menyimpan kod status secara dalaman.
Pengendali tersuai kami, wrapHandler(), memintas permintaan dan respons. Ia menggunakan StatusRespWr untuk mendapatkan semula kod status selepas permintaan diproses oleh pengendali asal. Jika kod status menunjukkan ralat (400 atau lebih tinggi), kami log kejadian bersama-sama dengan laluan fail yang diminta.
Untuk melaksanakan fungsi pengelogan ini, kami membalut pengendali asal dan mendaftarkannya seperti yang ditunjukkan dalam coretan kod di bawah:
<code class="go">http.HandleFunc("/o/", wrapHandler( http.StripPrefix("/o", http.FileServer(http.Dir("/test")))))</code>
Dengan menjalankan pelayan fail yang diubah suai ini, kami kini menerima log bermaklumat untuk fail yang tidak wujud, memastikan keterlihatan kepada isu yang berpotensi:
<code class="text">2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2</code>
Dengan peningkatan ini, pentadbir pelayan boleh memantau dan menangani masalah yang berpotensi berkaitan dengan URL yang salah atau fail yang hilang secara proaktif.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mendiagnosis Ralat 404 Dengan Berkesan Semasa Melayan Fail dengan http.FileServer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!