如果URL与Go中的任何模式不匹配,如何提供文件?

时间:2016-04-09 18:53:16

标签: angularjs go typescript angular servemux

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

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

现在我在Angular中有一条路线,比方说/posts,如果它是默认路线(也就是useAsDefaulttrue时),或者我只是手动转到http://example.com/posts,我将从Go获得404错误,这意味着没有为此路径指定处理程序。

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

2 个答案:

答案 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)

我认为您需要更改angular2应用中的网址提供商设置才能使用HashLocationStrategy。使用此方法,您的路线将采用

形式
  

#/ posts

并且不会在golang应用中触发任何路线。