相关疑难解决方法(0)

设置杜松子酒中找不到的路线

我在Gin中设置了默认路由器和一些路由:

router := gin.Default()
router.POST("/users", save)
router.GET("/users",getAll)
Run Code Online (Sandbox Code Playgroud)

但是如何处理杜松子酒中没有找到404路线?

最初,我使用的是我理解Gin使用的httprouter,所以这就是我原来的...

router.NotFound = http.HandlerFunc(customNotFound)
Run Code Online (Sandbox Code Playgroud)

和功能:

func customNotFound(w http.ResponseWriter, r *http.Request) {
    //return JSON
    return
}
Run Code Online (Sandbox Code Playgroud)

但这不适用于杜松子酒.

我需要能够使用以下命令返回JSON,c *gin.Context以便我可以使用:

c.JSON(404, gin.H{"code": "PAGE_NOT_FOUND", "message": "Page not found"})
Run Code Online (Sandbox Code Playgroud)

go go-gin

13
推荐指数
1
解决办法
7842
查看次数

Gin 路由器:路径段与现有通配符冲突

我想让我的应用程序服务于以下事物。

  • a.com => 将 /www 提供给浏览器,以便浏览器可以查找 /www/index.html)
  • a.com/js/mylib.js => 将 /www/js/mylib.js 提供给浏览器
  • a.com/api/v1/disk => 返回 JSON 的典型 REST API
  • a.com/api/v1/memory => 另一个 API

我做了如下代码:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()

    r.Static("/", "/www")

    apiv1 := r.Group("api/v1")
    {
        apiv1.GET("/disk", diskSpaceHandler)
        apiv1.GET("/memory", memoryHandler)
        apiv1.GET("/cpu", cpuHandler)
    }

    r.Run(":80")
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,它恐慌:

panic: path segment '/api/v1/disk' conflicts with existing wildcard '/*filepath' in path '/api/v1/disk'
Run Code Online (Sandbox Code Playgroud)

我明白为什么它会恐慌,但我不知道如何解决。

我脑子里只有两件事:

  1. 使用 NoRoute() 函数,它将处理 /api/v1 组路径以外的其他内容(不知道我是如何实现的)
  2. 使用中间件。有静态中间件https://github.com/gin-gonic/contrib但代码在 Windows 上不起作用(https://github.com/gin-gonic/contrib/issues/91

先感谢您。

go go-gin

5
推荐指数
2
解决办法
3784
查看次数

标签 统计

go ×2

go-gin ×2