gorilla/mux.Router搭配net/http.Handle无法加载CSS文件怎么办
问题原因
静态文件路由注册对象错误:
- 调用
http.Handle()注册/static/处理逻辑时,路由会被绑定到Go标准库默认的http.DefaultServeMux路由实例上 - 启动服务时
http.ListenAndServe(":8080", r)传入的是你手动创建的gorilla/mux路由实例,该实例上没有注册任何静态文件相关的处理规则,所有/static/开头的CSS、JS等资源请求都无法被正确响应,自然样式不生效。
修正代码
将静态文件路由直接注册到实际生效的mux实例上即可,修正后的main.go代码如下:
func main() { r := mux.NewRouter() // 静态路由注册到当前使用的mux实例,匹配/static/前缀的所有请求 r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("./static/")))) r.HandleFunc("/index", index) http.ListenAndServe(":8080", r) } func index(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "./static/html/test.html") }
排查校验点
- 服务启动后先直接访问
http://localhost:8080/static/css/test.css,如果能正常返回CSS文本内容,说明静态路由配置正确 - 注意
./static/是相对路径,相对于你执行go run/运行编译后二进制文件时的工作目录,而非main.go文件所在目录,如果工作目录不匹配也会导致资源加载404
内容的提问来源于stack exchange,提问作者delpid
相关产品推荐
相关产品推荐

