Go使用路由器提供静态文件,内容

时间:2014-10-02 13:35:21

标签: go

我正在尝试提供包含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

1 个答案:

答案 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,那么您需要单独以静态方式注册每个目录。