Golang Go语言中Gin的路由问题,路由不匹配

Golang Go语言中Gin的路由问题,路由不匹配

示例:

GET /file/in --> loginHandler GET /user/logout --> logoutHandler

在我第一次退出的时候,确实是执行了 /user/logout 匹配上了路由(清除了 session 后并重定向到了 /user/login )

在这之后当我又一次点击退出时,执行的却不是 /user/logout 了,而是执行了 /user/login

在 GitHub 上面看别人提的 issues 也是出现了类似这种路由不匹配的问题,说是 Gin 的一个 Bug。

有大佬遇到这种问题吗,求助。


更多关于Golang Go语言中Gin的路由问题,路由不匹配的实战教程也可以访问 https://www.itying.com/category-94-b0.html

17 回复

你还是好好确认一下,发出去的请求是否都正确。

更多关于Golang Go语言中Gin的路由问题,路由不匹配的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不可能吧,一个这么大的框架出这个问题。

在前端 /user/logout 链接处增加一个时间戳试试。
如 /user/logout?t=123456789

有可复现的代码(serve+client)吗?我看下。

重定向用的 301 ?

用了 307,301 也试过了,跟重定向有关系吗

#6 301 是永久重定向

没碰到过这种问题,插个眼。

清完缓存又是正常的,不会出现路由问题,但是不能每次都 Disable cache 吧…

看了一下确实是用了 301(没有改回来)。现在改了一下好像可以了。感谢





谢谢大家,问题解决了,是由于我用了 301 重定向导致的。改了一下貌似没问题了

搞什么大新闻

有问题先去 issus 看下

gin 是用的 httprouter…没这么低级的错误吧

整天就想搞个大新闻

httprouter 实现基于 Radix tree,只能精确匹配

在Go语言的Gin框架中,路由不匹配的问题通常涉及路径定义、请求方法(GET、POST等)不匹配,或者参数传递错误等几个方面。以下是一些解决这类问题的常见方法:

  1. 检查路径定义: 确保定义的路由路径与实际请求的URL完全匹配。路径中的参数应使用:paramName形式,并确保请求URL中的参数名和位置与之对应。

  2. 请求方法匹配: Gin区分大小写,并且精确匹配HTTP方法。如果定义的是POST路由,但请求使用了GET方法,将会导致404错误。请检查路由定义与请求方法的一致性。

  3. 中间件和路由顺序: Gin中的中间件和路由定义顺序会影响请求处理流程。确保中间件正确配置,并且路由定义顺序合理,避免提前拦截和处理请求。

  4. 正则表达式和通配符: 如果使用了正则表达式或通配符定义路由,确保它们正确匹配请求的URL。正则表达式的错误可能导致路径不匹配。

  5. 调试和日志: 使用Gin提供的调试模式或自定义日志,记录请求信息和路由匹配结果,有助于诊断问题。

  6. 文档和社区资源: 查阅Gin官方文档和社区论坛,了解常见问题和最佳实践。

通过上述步骤,通常可以定位并解决Gin框架中的路由不匹配问题。如果问题依旧存在,建议详细检查请求信息,或者提供更具体的错误日志和代码示例,以便进一步分析。

回到顶部