我正在使用路由器(httprouter)并希望从root用户提供静态文件。
中的 css文件
static/style.css
<link href="./static/style.css" rel="stylesheet">
main.go
router := httprouter.New()
router.ServeFiles("/static/*filepath", http.Dir("/static/"))
router.GET("/", Index)
但是http://localhost:3001/static/style.css给了我404错误,渲染页面中的样式也不起作用。
答案 0 :(得分:4)
尝试将http.Dir("/static/")
替换为http.Dir("static")
(这将是您的静态目录的相对路径)或http.Dir("/absolute/path/to/static")
。这个单一更改的例子对我有用。
另见httprouter的ServeFiles文档:
func (r *Router) ServeFiles(path string, root http.FileSystem)
ServeFiles提供给定文件系统根目录中的文件。路径必须以“/ * filepath”结尾,然后从本地路径/ defined / root / dir / * filepath提供文件。例如,如果root是“/ etc”而* filepath是“passwd”,则将提供本地文件“/ etc / passwd”。在内部使用http.FileServer,因此使用http.NotFound而不是Router的NotFound处理程序。要使用操作系统的文件系统实现,请使用http.Dir:
router.ServeFiles(“/ src / * filepath”,http.Dir(“/ var / www”))
这可能也有帮助 - Third-party router and static files
我必须承认,我不清楚为什么需要两次'静态'。如果我将http.Dir设置为“。”这一切都适用于我需要导航到localhost的单一差异:3001 / static / static / style.css
答案 1 :(得分:2)
在调用router.ServeFiles("/static/*filepath", http.Dir("/static/"))
中,第二个参数提供root,第一个arg定义来自该根的路径。所以,试试
router.ServeFiles("*filepath", http.Dir("/static"))
两次没有提及 / static / 。
答案 2 :(得分:0)
这就是我的工作方式:
func main() {
router := httprouter.New()
router.GET("/", Index)
router.ServeFiles("/static/*filepath",http.Dir("static"))
log.Fatal(http.ListenAndServe(":3001", router))
}