gorilla mux 在使用变量时为静态文件设置了错误的路径
Posted
技术标签:
【中文标题】gorilla mux 在使用变量时为静态文件设置了错误的路径【英文标题】:gorilla mux sets wrong path for static files when using variables 【发布时间】:2020-04-27 09:59:10 【问题描述】:我设置了以下路由:
func (app *application) routes() *mux.Router
r := mux.NewRouter()
fs := http.FileServer(http.Dir("./ui/static/"))
r.PathPrefix("/ui/static/").Handler(http.StripPrefix("/ui/static/", fs))
authRequired := r.PathPrefix("/").Subrouter()
authRequired.HandleFunc("/foo", app.foo).Methods("POST") // <- this one works fine
authRequired.HandleFunc("/bar/id:[0-9]+", app.bar) // <- this does not
return r
当我调用 URL http://server/foo
时,一切都很好。
与例如http://server/bar/1
网站已送达,但我收到类似的错误消息
The resource "http://server/bar/ui/static/css/style.css" has been blocked due to mime type mismatch
http://server/bar/ui/static/...
中的 /bar
不应该存在。我该如何解决这个问题?
【问题讨论】:
哦,天哪,因为树木,我看不到森林。非常感谢,@mkopriva。请将其添加为答案,以便我接受。 【参考方案1】:The resource "http://server/bar/ui/static/css/style.css" has been blocked due to mime type mismatch
“mime 类型不匹配”错误有时是由于找不到文件而浏览器接收到一些默认响应,其正文包含 not css 但可能只是一些纯文本或 html大多数。
如果你看一下导致错误的路径:
http://server/bar/ui/static/css/style.css
然后是您注册静态文件处理程序的路径:
r.PathPrefix("/ui/static/").Handler( ...
你会看到浏览器在错误的地方寻找文件,如果你认为这个特定的错误是在你在/bar
时发生的,你可以推断问题是由相关链接引起的/bar
处理程序提供的 html(和/或由 html 正确链接的静态文件)。
因此解决方案是在静态和 html 文件中使用绝对路径。
当我调用 URL http://server/foo 时,一切都很好。
注意/foo
似乎是在POST
方法下注册的,这样的端点不会导致浏览器发出对静态文件的后续请求,就像html返回GET端点一样,因此它没有失败的理由出现静态文件“mime 类型不匹配”错误。
【讨论】:
以上是关于gorilla mux 在使用变量时为静态文件设置了错误的路径的主要内容,如果未能解决你的问题,请参考以下文章
如何在 gorilla/mux 包中初始化 HandleFunc 中的变量