我正在尝试提供包含javascript,css,html文件的静态文件
但它无法加载static
目录
我做错了什么?
请帮帮我
router := httprouter.New()
handler := func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
type Page struct {
Title string
}
tp := template.Must(template.ParseFiles("templates/main.html", "templates/base.html"))
tp.ExecuteTemplate(w, "base", &Page{Title: "AAAAA"})
}
router.Handle("GET", "/", handler)
// func (r *Router) Handle(method, path string, handle Handle)
// func (r *Router) Handler(method, path string, handler http.Handler)
// func (r *Router) HandlerFunc(method, path string, handler http.HandlerFunc)
router.Handle("GET", "/aaa", aaa.aaaHandler)
router.Handle("POST", "/aaa_01_submit", aaa.aaa01Submit)
router.Handle("GET", "/aaa_01_run", aaa.aaa01Run)
http.Handle("/static", http.FileServer(http.Dir("static")))
http.ListenAndServe(":8000", router)
这是我的文件
/app
/templates
main.html
base.html
/static
/js
files to read...
/lib
/css
main.go
答案 0 :(得分:3)
问题在于以下几点:
http.Handle("/static", http.FileServer(http.Dir("static")))
http.ListenAndServe(":8000", router)
第一行使用default mux注册静态文件处理程序。第二行运行服务器,根处理程序设置为router
。默认的mux和向其注册的静态文件处理程序将被忽略。
有两种方法可以解决这个问题:
使用ServeFiles配置router
来处理静态文件。
router.ServeFiles("/static/*filepath", http.Dir("static"))
使用默认的mux注册router
并使用默认的mux作为根处理程序。另外,添加一个尾随" /" to" / static"为整个树提供服务,为文件服务器提供strip the "/static/" prefix。
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.Handle("/", router)
http.ListenAndServe(":8000", nil)
这些建议假定您使用类似" /static/js/example.js"等URI来提供静态资源。如果您使用的是" /js/example.js"之类的URI,那么您需要单独以静态方式注册每个目录。