Echo web框架与现有Gorilla Mux API的集成



由于我们希望使用openapi包(opai-codegen(,我想转移到我的API的echo框架。然而,我们当前的API是通过gorilla-mux构建的。由于当前代码库的大小,我们需要同时运行它们。

因此,我正试图弄清楚如何通过相同的http.Server使大猩猩mux和echo框架协同工作

大猩猩mux API是通过以下方式创建的:

router := mux.NewRouter().StrictSlash(true)
router.Handle("/..",...)
//etc ...

然后我的echo API通过以下方式创建:

echo := echo.New()
echo.Get("/..", ...)
// etc ...

然而,我无法让它们使用相同的http.ListenAndServe运行

很想知道有没有什么能让这两个人一起工作?

感谢

这就是我所能想到的,尽管你需要移动中间件来响应

package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
func main() {
// Echo instance
e := echo.New()
// Middleware
e.Use(middleware.Logger())
e.Use(middleware.Recover())
r := mux.NewRouter()
r.HandleFunc("/mux/", Hello).Methods("GET", "PUT").Name("mux")
r.HandleFunc("/muxp/", HelloP).Methods("POST").Name("muxp")
gorillaRouteNames := map[string]string{
"mux":  "/mux/",
"muxp": "/muxp/",
}
// Routes
e.GET("/", hello)
// ro := e.Any("/mux", ehandler)
for name, url := range gorillaRouteNames {
route := r.GetRoute(name)
methods, _ := route.GetMethods()
e.Match(methods, url, echo.WrapHandler(route.GetHandler()))
fmt.Println(route.GetName())
}
// Start server
e.Logger.Fatal(e.Start(":1323"))
}
// Handler
func hello(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
}
func Hello(w http.ResponseWriter, req *http.Request) {
fmt.Fprintln(w, "Hello world!")
}
func HelloP(w http.ResponseWriter, req *http.Request) {
fmt.Fprintln(w, "Hello world By Post!")
}

最新更新