【发布时间】:2014-12-16 12:24:40
【问题描述】:
我似乎无法正确路由。我正在使用 Gorilla Mux,我正在尝试从任何 url 提供我的 angular 应用程序,所以基本上是我的 index.html,但它们以“/foo”开头。
这个有效:
func StaticFileServer(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, config.dir)
}
func main() {
fs := http.Dir(config.dir)
fileHandler := http.FileServer(fs)
router = mux.NewRouter()
router.Handle("/foo/page", PublicHandler(handler(getAll)).Methods("GET")
router.Handle("/foo/page/{id}", PublicHandler(handler(getOne)).Methods("GET")
router.PathPrefix("/{blaah}/{blaah}/").Handler(fileHandler)
router.PathPrefix("/").HandlerFunc(StaticFileServer)
...
}
但是必须有比明确声明每条可能的路线更简单的方法,例如 PathPrefix("/{blaah}/{blaah}/") thingy... 有了这个,除 /{blaah}/{blaah}/ 之外的任何其他 url 都会返回未找到的 404 页面,而不是 index.html。
因此,只要可以找到所有内容(静态文件等),我都希望得到服务,但其他所有内容都应返回 /public/index.html。
【问题讨论】:
-
没有。它使客户端请求的每个在 gorilla 路由器中未定义的 URL 都响应 index.html 文件 - 从而让您的 angualr 应用程序处理 API 调用(ui-router、ngRoute)以外的路由:)。