为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
茅侃侃 2022-01-04 10:27:12
我正在使用 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如果请求 URL 与我在ServeMux?
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

嗯,这实际上很容易。该net/http文件说,这样的:


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


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


mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

    http.ServeFile(w, r, mysiteRoot + "index.html")

})

它工作得很好。


查看完整回答
反对 回复 2022-01-04
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

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

#/帖子

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


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信