Skip to content

echo ​

For echo v5.

bash
go get go.chanx.dev/adapters/echo
go
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 through chanx.UserFrom("user"). An error it returns goes through echo's HTTPErrorHandler, and no socket is opened.
  • The client IP is c.RealIP(), so echo's IPExtractor applies.
  • Docs: chanxecho.MountDocs serves /asyncapi, .json and .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.

MIT licensed