一尘不染

第三方路由器和静态文件

go

我在Google App
Engine上使用了第三方路由器(httprouter),并且希望从根目录提供静态文件。

由于使用了App Engine,我需要将第三方路由器附加到DefaultServeMuxon /

router := httprouter.New()

// Doesn't work, duplicated "/".
http.Handle("/", http.FileServer(http.Dir("public")))

// Needed because of App Engine.
http.Handle("/", router)

问题是,这会重复/模式和出现“ /多个注册 ”的紧急情况

如何提供文件( 尤其是index.html从根目录访问文件)并使用第三方路由器?


阅读 227

收藏
2020-07-02

共1个答案

一尘不染

如果您在提供静态文件,/则无法按照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)
2020-07-02