Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
493 views
in Technique[技术] by (71.8m points)

go - How do you serve static files with chi router

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
question from:https://stackoverflow.com/questions/65880069/how-do-you-serve-static-files-with-chi-router

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You should modify the path registered in the router to

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

The * represent different file names.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...