我不明白为什么我的静态资源没有被服务。 这里是代码:
func main() { http.HandleFunc("/", get_shows) http.HandleFunc("/get", get_show_json) http.HandleFunc("/set", set_shows) http.Handle("/css/", http.FileServer(http.Dir("./css"))) http.Handle("/js/", http.FileServer(http.Dir("./js"))) http.ListenAndServe(":8080", nil) }
当我运行该程序,导航到http://myhost.fake/css/或http://myhost.fake/css/main.css (这些存在于文件系统中),我得到一个404错误。 如果将“./css”replace为目录的完整path,情况也是如此。 同上的js静态目录。 我的其他处理程序工作正常。 我在一个Linux上。 谢谢!
您的处理程序路径( /css/
)被传递给Fileserver处理程序加上前缀后面的文件。 这意味着当您访问http://myhost.fake/css/test.css时,您的Fileserver正在尝试查找./css/css/test.css
文件。
http包提供StripPrefix
功能StripPrefix
/css/
前缀。
这应该做到这一点:
http.Handle("/css/", http.StripPrefix("/css/", http.Fileserver(http.Dir("css"))))
我现在无法验证,但是IIRC: s/"./css"/"css"/
; s/"./js"/"js"/
。
编辑:现在,我终于可以检查来源:这是我做了什么,对我有用:
http.Handle("/scripts/", http.Fileserver(http.Dir(""))) http.Handle("/images/", http.Fileserver(http.Dir("")))
./images/*.{gif,png,...}
所有图像都可以正常使用。 关于脚本的同样的故事。