gorilla mux 在使用变量时为静态文件设置了错误的路径
gorilla mux sets wrong path for static files when using variables
我设置了以下路由:
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
不应该存在。我该如何解决这个问题?
The resource "http://server/bar/ui/static/css/style.css" has been blocked due to mime type mismatch
"mime type mismatch" 错误有时是由于找不到文件和浏览器收到一些默认响应,其正文包含 not css 但可能只是一些纯文本,或者最多 html。
如果您查看导致错误的路径:
http://server/bar/ui/static/css/style.css
然后是您注册静态文件处理程序的路径:
r.PathPrefix("/ui/static/").Handler( ...
您会看到浏览器正在错误的位置查找文件,如果您认为此特定错误是在您打开 /bar
时发生的,则可以推断问题是由html 中的相对链接(and/or 由 html 正确链接的静态文件)由 /bar
处理程序提供服务。
因此解决方案是在静态文件和 html 文件中使用绝对路径。
When I call the URL http://server/foo everything is fine.
注意/foo
好像是在POST
方法下注册的,这样的端点不会导致浏览器发出后续的静态文件请求,比如html返回GET端点可能,因此它没有理由因静态文件 "mime type mismatch" 错误而失败。
我设置了以下路由:
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
不应该存在。我该如何解决这个问题?
The resource "http://server/bar/ui/static/css/style.css" has been blocked due to mime type mismatch
"mime type mismatch" 错误有时是由于找不到文件和浏览器收到一些默认响应,其正文包含 not css 但可能只是一些纯文本,或者最多 html。
如果您查看导致错误的路径:
http://server/bar/ui/static/css/style.css
然后是您注册静态文件处理程序的路径:
r.PathPrefix("/ui/static/").Handler( ...
您会看到浏览器正在错误的位置查找文件,如果您认为此特定错误是在您打开 /bar
时发生的,则可以推断问题是由html 中的相对链接(and/or 由 html 正确链接的静态文件)由 /bar
处理程序提供服务。
因此解决方案是在静态文件和 html 文件中使用绝对路径。
When I call the URL http://server/foo everything is fine.
注意/foo
好像是在POST
方法下注册的,这样的端点不会导致浏览器发出后续的静态文件请求,比如html返回GET端点可能,因此它没有理由因静态文件 "mime type mismatch" 错误而失败。