Demo 学 Echo Part7 Middleware 和 Logging
中间件是在处理http请求之前或之后调用的代码块。中间件通常按功能来做,例如:身份验证中间件,用于日志记录的中间件,用于gzip压缩的中间件等
跑一遍,来理解
package main
import (
"fmt"
"net/http"
"github.com/labstack/echo"
)
func middlewareOne(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
fmt.Println("from middleware one")
return next(c)
}
}
func middlewareTwo(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
fmt.Println("from middleware two")
return next(c)
}
}
func main() {
e := echo.New()
// middleware here
e.Use(middlewareOne)
e.Use(middlewareTwo)
e.GET("/index", func(c echo.Context) (err error) {
fmt.Println("threeeeee!")
return c.JSON(http.StatusOK, true)
})
e.Logger.Fatal(e.Start(":9000"))
}
客户端
curl http://localhost:9000/index
output=>true
服务端输出
http server started on [::]:9000
from middleware one
from middleware two
threeeeee!
集成第三方中间件:使用echo.WrapMiddleware()函数将中间件转换为echo兼容中间件,前提是必须采用func(http.Handler)http.Handler的形式来声明中间件。
例如
package main
import (
"fmt"
"net/http"
"github.com/labstack/echo"
)
func middlewareSomething(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Println("from middleware something")
next.ServeHTTP(w, r)
})
}
func main() {
e := echo.New()
// middleware here
e.Use(echo.WrapMiddleware(middlewareSomething))
e.GET("/index", func(c echo.Context) (err error) {
fmt.Println("threeeeee!")
return c.JSON(http.StatusOK, true)
})
e.Logger.Fatal(e.Start(":9000"))
}
测试
#Client:
curl http://localhost:9000/index
true
#Server:
http server started on [::]:9000
from middleware something
threeeeee!
Echo 自己的 Middleware: Logger
package main
import (
"net/http"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
)
func main() {
e := echo.New()
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Format: "method=${method}, uri=${uri}, status=${status}\n",
}))
e.GET("/index", func(c echo.Context) (err error) {
return c.JSON(http.StatusOK, true)
})
e.Logger.Fatal(e.Start(":9000"))
}
运行一下 服务端按定义出现了一行记录
#Client:
curl http://localhost:9000/index
true
#Server:
http server started on [::]:9000
method=GET, uri=/index, status=200
最后修改于 2019-08-17