Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you serve static files with chi router

Tags:

go

I just started using chi for smaller projects, and I was curious how static file serving is handled here. What's the shortest way to accomplish it?

Here's what I tried for file serving

fs := http.FileServer(http.Dir("static"))
router.Handle("/static", http.StripPrefix("/static/", fs))

However, this did not work, so I tried this example straight from their repo:

func fileServer(r chi.Router, serverRoute string, pathToStaticFolder http.FileSystem) {
    if strings.ContainsAny(serverRoute, "{}*") {
        panic("FileServer does not permit any URL parameters.")
    }

    if serverRoute != "/" && serverRoute[len(serverRoute)-1] != '/' {
        r.Get(serverRoute, http.RedirectHandler(serverRoute+"/", 301).ServeHTTP)
        serverRoute += "/"
    }
    serverRoute += "*"

    r.Get(serverRoute, func(w http.ResponseWriter, r *http.Request) {
        rctx := chi.RouteContext(r.Context())
        serverRoutePrefix := strings.TrimSuffix(rctx.RoutePattern(), "/*")
        fs := http.StripPrefix(serverRoutePrefix, http.FileServer(pathToStaticFolder))
        fs.ServeHTTP(w, r)
    })
}

dir, _ := os.Getwd()
filesDir := http.Dir(filepath.Join(dir, "static"))
fileServer(router, "/", filesDir)

Unfortunately, neither way works, and I'm currently at a loss. Anyone who's ever used Chi as their router, how do you serve static files?

Here's my folder structure

project
  |_ main.go
  |_ static
      |_css
         |_index.css
      |_img
      |_js
like image 488
Darien Miller Avatar asked Sep 12 '25 17:09

Darien Miller


1 Answers

You should modify the path registered in the router to

router.Handle("/static/*", http.StripPrefix("/static/", fs))

The * represent different file names.

like image 157
Ismail Gjevori Avatar answered Sep 15 '25 21:09

Ismail Gjevori