Httprouter与静态文件有关

时间:2015-04-25 00:05:11

标签: go

我正在使用路由器(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错误,渲染页面中的样式也不起作用。

3 个答案:

答案 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))
}