barodeur / go-handlers

Define a custom Handler and router based on gorilla + negroni with easy integration of middlewares

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Custom Router and Handler

Advantages

Injection of middlewares

type Middleware interface {
  Apply(f HandlerFunc) HandlerFunc
}
type MiddlewareFunc func(HandlerFunc) HandlerFunc

Middleware as a struct:

type MyMiddleware struct {
  SomeData string
}

func(m *MyMiddleware) Apply(h HandlerFunc) HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request, vars map[string]string) error {
		// Do something before handler
		h(w, r, vars)
		// Do something after handler
	}
}

Or as a function

func MyFunctionMiddleware(h HandlerFunc) HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request, vars map[string]string) error {
		// Do something before handler
		h(w, r, vars)
		// Do something after handler
	}
}

Add them to your router with:

router.Use(MyMiddleware)
router.Use(MiddlewareFunc(MyMiddleware))

Middlewares have to be setup before setting the handlers.

Error propagation in the middlewares

The handler returns an error which can be read/managed by the middlwares. So you can add your Airbrake or Rollbar notification as a simple middleware.

Testable handlers based on Gorilla Muxer

mux.Vars(req)vars map[string]string argument of Handler

Included middlewares

Logging Middleware

logger := Log.New(os.Stdout, "[http]", 0)
middleware := NewLoggingMiddleware(logger)
router.Use(middleware)

Cors Middleware

router.Use(MiddlewareFunc(NewCorsMiddleware))

Error Middleware

Thie middleware send notification to Rollbar using, you need to configure it previously.

https://github.com/svtp/rollbar

router.Use(MiddlewareFunc(ErrorHandler))

About

Define a custom Handler and router based on gorilla + negroni with easy integration of middlewares


Languages

Language:Go 100.0%