Masalah menyediakan JavaScript dan fail aset menggunakan Gorilla Mux di Golang ialah situasi yang mungkin sering dihadapi oleh ramai pembangun apabila menggunakan pustaka ini. Gorilla Mux ialah perpustakaan penghalaan yang popular, tetapi anda mungkin menghadapi beberapa kesukaran apabila berurusan dengan sumber statik. Editor PHP Xiaoxin akan memperkenalkan anda kepada beberapa masalah dan penyelesaian biasa dalam artikel ini untuk membantu anda menggunakan Gorilla Mux dengan lebih baik untuk menyediakan JavaScript dan fail aset dalam projek Golang.
Saya mempunyai sistem fail seperti ini:
-- api -> api.go -- styles -> style1.css -> style2.css -> ... -- scripts -> script1.js -> script2.js -> ... -- static -> page1.html -> page2.html -> ... -- assets -> image1.png -> image2.png -> ... -- main.go
Dalam fail api.go, saya menyediakan pelayan Gorilla mux saya seperti ini, (Mendapatkan kod daripada Golang Gorilla mux ini, http.FileServer returns 404):
func (api *APIServer) Run() { router := mux.NewRouter() router.PathPrefix("/styles/").Handler(http.StripPrefix("/styles/", http.FileServer(http.Dir("styles")))) router.PathPrefix("/").Handler(http.StripPrefix("/", http.FileServer(http.Dir("static")))) router.PathPrefix("/scripts/").Handler(http.StripPrefix("/scripts/", http.FileServer(http.Dir("scripts")))) router.PathPrefix("/assets/").Handler(http.StripPrefix("/assets/", http.FileServer(http.Dir("assets")))) if err := http.ListenAndServe(api.listenAddr, router); err != nil { log.Printf("error starting server %s", err.Error()) } fmt.Println("server start running") }
fail html:
<link rel="stylesheet" type="text/css" href="styles\login.css" /> <script src="scripts\login.js"></script> <img id="img-show" src="assets\bin.png" alt="" width="25px" />
Pelayar hanya boleh melihat html (statik) dan css (gaya), tetapi bukan skrip dan sumber, walaupun pada hakikatnya semuanya sama seperti dua yang pertama. Ralat:
(Golang Gorilla mux dengan http.FileServer mengembalikan 404) Kedua-dua pilihan ini hanya membantu untuk fail html dan css, menukar laluan juga tidak memberikan hasil.
Masalah anda disebabkan oleh pengendali "/", yang sepadan dengan "/aset" dan "/skrip" dan diisytiharkan sebelum laluan ini. Lihat di sinicara gorila/mux sepadan dengan laluan
Jika anda menyusun semula susunan laluan, masalah ini akan hilang:
router.PathPrefix("/styles/").Handler(http.StripPrefix("/styles/", http.FileServer(http.Dir("styles")))) router.PathPrefix("/scripts/").Handler(http.StripPrefix("/scripts/", http.FileServer(http.Dir("scripts")))) router.PathPrefix("/assets/").Handler(http.StripPrefix("/assets/", http.FileServer(http.Dir("assets")))) router.PathPrefix("/").Handler(http.StripPrefix("/", http.FileServer(http.Dir("static"))))
Atas ialah kandungan terperinci Masalah menyediakan JavaScript dan fail aset menggunakan Gorilla Mux di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!