Маршрут джина подстановочный конфликт конфликтует с существующими детьми - PullRequest
0 голосов
/ 17 октября 2018

Я хотел бы построить gin программу, которая обслуживает следующие маршруты:

r.GET("/special", ... // Serves a special resource.
r.Any("/*", ...       // Serves a default resource.

Однако такая программа паникует во время выполнения:

[GIN-debug] GET    /special                  --> main.main.func1 (2 handlers)
[GIN-debug] GET    /*                        --> main.main.func2 (2 handlers)
panic: wildcard route '*' conflicts with existing children in path '/*'

Можно ли создать программу джина, которая обслуживает ресурс по умолчанию для каждого маршрута , за исключением для одного, который обслуживает другой ресурс?

Многие страницы в Интернете приводят меня кПолагаю, что это невозможно при использовании маршрутизатора джина по умолчанию, так как проще всего обслуживать эти маршруты из программы джина?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Возможно, кто-то еще (например, я) получит это сообщение об ошибке в ситуации, когда gin.NoRoute () не будет приемлемым исправлением.Я взял следующий код из github в поисках обходного пути для этой проблемы:

    router.GET("/v1/images/:path1", GetHandler)           //      /v1/images/detail
    router.GET("/v1/images/:path1/:path2", GetHandler)    //      /v1/images/<id>/history

func GetHandler(c *gin.Context) {
    path1 := c.Param("path1")
    path2 := c.Param("path2")

    if path1 == "detail" && path2 == "" {
        Detail(c)
    } else if path1 != "" && path2 == "history" {
        imageId := path1
        History(c, imageId)
    } else {
        HandleHttpError(c, NewHttpError(404, "Page not found"))
    }
}
0 голосов
/ 17 октября 2018

Похоже, что функция gin.NoRoute(...) сделает свое дело.

r.GET("/special", func(c *gin.Context) { // Serve the special resource...
r.NoRoute(func(c *gin.Context) {         // Serve the default resource...

См. Также https://stackoverflow.com/a/32444263/244128

...