我在Google App Engine上使用第三方路由器(httprouter),并希望从root用户提供静态文件。
由于App Engine,我需要将第三方路由器附加到DefaultServeMux
上的/
:
router := httprouter.New()
// Doesn't work, duplicated "/".
http.Handle("/", http.FileServer(http.Dir("public")))
// Needed because of App Engine.
http.Handle("/", router)
问题在于这会重复/
模式并出现“多次注册/ ”的恐慌
如何从root用户提供文件,尤其是index.html
并使用第三方路由器?
答案 0 :(得分:0)
如果您在/
处提供静态文件,那么根据https://github.com/julienschmidt/httprouter/issues/7#issuecomment-45725482
您无法在根目录注册“全部捕获”以提供文件,同时还在子路径中注册其他处理程序。 另请参阅https://github.com/julienschmidt/httprouter#named-parameters
上的说明
您应该使用Go在应用程序根目录下提供模板,在子路径上使用静态文件(CSS,JS等):
router := httprouter.New()
router.GET("/", IndexHandler)
// Ripped straight from the httprouter docs
router.ServeFiles("/static/*filepath", http.Dir("/srv/www/public/"))
http.Handle("/", router)