golang web 自定義Handler時候靜態資源問題

go 對靜態文件的服務寫法:css

http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))函數

本身玩的時候遇到的問題spa

 自定義Handler 實現serveHTTP() 方法來動態match路由   路由定義爲:map[string]func(http.ResponseWriter, *http.Request)    路徑match路由函數   靜態文件的請求也會走本身實現的serveHTTP() 方法 會在map中匹配不到路由code

致使靜態文件(模板中js和css等)導入失敗orm

後來本身看了看源碼 找到一個low b的解決辦法 在serveHTTP() 判斷是否請求靜態資源(規則自定義)調用http.StripPrefix("/static/", http.FileServer(http.Dir("static")))返回的handler的serveHTTP方法實現靜態文件服務ip

ServeHTTP:

func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	fmt.Println("outer:", r.URL.Path)

	if h, ok := mux[r.URL.String()]; ok {
		h(w, r)
	} else if strings.HasPrefix(r.URL.String(), "/static/") {
		had := http.StripPrefix("/static/", http.FileServer(http.Dir("static")))
		had.ServeHTTP(w, r)
	} else {
		http.Error(w, "404 not found", 404)
	}

}
相關文章
相關標籤/搜索