go - 你如何使用 chi 路由器提供静态文件

标签 go

我刚开始在较小的项目中使用 chi,我很好奇这里是如何处理静态文件服务的。完成它的最短方法是什么?
这是我尝试的文件服务

fs := http.FileServer(http.Dir("static"))
router.Handle("/static", http.StripPrefix("/static/", fs))
但是,这不起作用,所以我直接从他们的 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)
不幸的是,这两种方法都行不通,我目前不知所措。曾经使用 Chi 作为路由器的任何人,您如何提供静态文件?
这是我的文件夹结构
project
  |_ main.go
  |_ static
      |_css
         |_index.css
      |_img
      |_js

最佳答案

您应该将路由器中注册的路径修改为

router.Handle("/static/*", http.StripPrefix("/static/", fs))
*代表不同的文件名。

关于go - 你如何使用 chi 路由器提供静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65880069/

相关文章:

http - 使用 FileServer 从 RiceBox 提供 favicon.icon

Ruby RSA 公钥加密到 Golang

string - 使用 Golang 对文件名中带有数字的字符串进行排序

go - 给定两个绝对 URI,找到它们之间的相对路径

go - 如果不强制执行 Go 的接口(interface),它们是否有必要?

database - Golang gorm mock

go - 如何将空值返回到空字符串字段

postgresql - 通过 Golang SQLX 执行的 postgres 查询中的间隔参数

opengl - 如何使用 openGL 的 golang 绑定(bind)定义 gl.DrawBuffers COLOR_ATTACHMENTi

php - 是否有任何用 PHP 或 Go 编写的 SMTP 服务器?