用不好的话,可能会引发很诡异的问题。
package main
import (
"net/http"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"github.com/sirupsen/logrus"
)
func injectFail(n echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
return echo.NewHTTPError(http.StatusBadRequest, "failed")
}
}
func main() {
logrus.SetFormatter(&logrus.TextFormatter{DisableQuote: true})
var e = echo.New()
e.Use(middleware.Logger(), middleware.Recover())
api := e.Group("/api")
api.Group("", injectFail)
api.GET("/user", func(c echo.Context) error {
return c.String(http.StatusOK, "ok")
})
if err := e.Start(":9394"); err != nil {
logrus.WithError(err).Error("fail")
}
logrus.Infof("bye")
}
按照上文代码,一般理解 curl 127.0.0.1:9394/api/user
会得到 "ok" 反馈。
但是,最特殊的点在于,127.0.0.1:9394/api/user2
会得到什么?
答案就是,会得到 "failed"