我正在使用Angular 2和Go构建单页应用程序,而在Angular中我使用路由。如果我打开网站,比如http://example.com/
,Go会将我的index.html
文件提供给我,这很好,因为我写了这个:
mux.Handle("/", http.FileServer(http.Dir(mysiteRoot)))
现在我在Angular中有一条路线,比方说/posts
,如果它是默认路线(也就是useAsDefault
是true
时),或者我只是手动转到http://example.com/posts
,我将从Go获得404错误,这意味着没有为此路径指定处理程序。
我不认为在Go中为每个Angular路由创建一个处理程序是个好主意,因为可能有很多路由。所以我的问题是,如果请求网址与我在index.html
中设置的任何其他模式不匹配,我如何在Go中提供ServeMux
?
答案 0 :(得分:1)
嗯,实际上这很容易。
net/http
文档says:
请注意,由于以斜杠结尾的模式命名为有根的子树, 模式" /"匹配所有与其他注册不匹配的路径 模式,而不仅仅是带有Path ==" /"。
的网址
所以我需要对我的"/"
处理程序做一些事情。 http.FileServer
在模式字符串中指定的目录中查找文件,因此我只是将其替换为:
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, mysiteRoot + "index.html")
})
它运作得很好。
答案 1 :(得分:0)