1

我正在使用 Angular 2 和 Go 构建单页应用程序,在 Angular 中我使用路由。如果我打开网站,比如说,http://example.com/Go 将为我提供我的index.html文件,这很好,因为我写了这个:

mux.Handle("/", http.FileServer(http.Dir(mysiteRoot)))

现在我在 Angular 中有一条路由,/posts比如说对于这条路。useAsDefaulttruehttp://example.com/posts

我不认为在 Go 中为每条 Angular 路由创建一个处理程序是一个好主意,因为可能有很多路由。index.html所以我的问题是,如果请求 URL 与我在我的设置中设置的任何其他模式不匹配,我如何在 Go 中提供服务ServeMux

4

2 回答 2

1

嗯,这实际上很容易。net/http文档是这样的:

请注意,由于以斜杠结尾的模式命名了根子树,因此模式“/”匹配所有其他注册模式不匹配的路径,而不仅仅是带有 Path ==“/”的 URL。

所以我需要和我的处理程序做点什么"/"http.FileServer在模式字符串中指定的目录中查找文件,因此我将其替换为:

mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    http.ServeFile(w, r, mysiteRoot + "index.html")
})

它工作得很好。

于 2016-04-09T20:24:27.803 回答
0

我认为您需要更改 angular2 应用程序中的 URL 提供程序设置以使用HashLocationStrategy。使用它,您的路线将采用以下形式

#/帖子

并且不会触发您的 golang 应用程序中的任何路由。

于 2016-04-09T19:09:57.047 回答