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

Go Gorilla Mux 未按预期路由

Go Gorilla Mux 未按预期路由

Go
米脂 2021-09-13 17:04:17
我在获取 Gorilla Mux 库以开始工作时遇到问题。从我阅读的文档和我完成的所有调试中,我似乎无法弄清楚问题是什么。这是我的路由:文件夹结构:project_root  |-- main.go  |-- routes         |-- routes.go         |-- user.gomain.go:package mainimport (    "fmt"    "net/http"    "./routes")func main() {    r := routes.CreateRoutes(http.Dir("./content"))    http.Handle("/", r)    err := http.ListenAndServe(fmt.Sprintf("%s:%d", "localhost", 8000), nil)    if err != nil {        fmt.Println("Error: ", err)    }}路线/routes.gopackage routesimport (    "net/http"    "github.com/gorilla/mux")func CreateRoutes(staticDir http.FileSystem) *mux.Router {    r := mux.NewRouter()    // Serve static pages (i.e. web app)    r.PathPrefix("/").Handler(http.FileServer(staticDir))    // Serve User Pages    createUserRoutes(r)    return r}每当我向服务器的根路径(即提供静态内容的路径)发出请求时,服务器都会按预期响应主页面。但是,任何其他调用都会导致 404 响应(我使用 cURL 测试请求)。例如,对http://localhost:8000/user/new的格式错误的请求应该返回 409,但返回 404。如果我期望 201 响应,则相同。一切看起来都正确,我已经检查了三次,但我无法弄清楚这里的问题是什么。
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

事实证明,解决方案很简单(就像往常一样)。route.go 中的这一行

r.PathPrefix("/").Handler(http.FileServer(staticDir))

导致意外路由。当使用 PathPrefix 时,它似乎将所有 URL 路由到第一个匹配的前缀(在这种情况下是这个前缀)。这解释了为什么提供静态文件,但没有其他任何工作。

解决方法是改用Path函数。正如文档中所解释的,有一个细微的区别;PathPrefix “如果给定的模板是完整 URL 路径的前缀,则匹配”,而 Path 则不匹配。因此,上面的行现在看起来像这样来解决我遇到的问题:

r.Path("/").Handler(http.FileServer(staticDir))


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

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