echo
For echo v5.
bash
go get go.chanx.dev/adapters/echogo
func Echo(engine *chanx.Engine) *echo.Echo {
e := echo.New()
auth := func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c *echo.Context) error {
c.Set("user", c.Request().Header.Get("X-User")) // read by chanx.UserFrom("user")
return next(c)
}
}
chanxecho.Mount(e.Group("", auth), engine) // "/ws/chat/:room"
chanxecho.MountDocs(e, engine, "/asyncapi", asyncapi.Info{Title: "Chat"})
return e
}go
engine.Handle("/ws/chat/{room}", ChatConsumer{}, chanx.UserFrom("user"))- Routes, groups and middleware are echo's.
{room}is registered as:room. - Middleware runs before the upgrade. A value it stores with
c.Set("user", u)is the connection's user throughchanx.UserFrom("user"). An error it returns goes through echo'sHTTPErrorHandler, and no socket is opened. - The client IP is
c.RealIP(), so echo'sIPExtractorapplies. - Docs:
chanxecho.MountDocsserves/asyncapi,.jsonand.yaml.
chanxecho.Mount and chanxecho.Handler take an optional Accept function replacing the default coder/websocket upgrade. Shut down with engine.Shutdown(ctx) as well as echo's.
Next: Fiber.