|
|
@ -0,0 +1,26 @@ |
|
|
|
|
|
package middleware |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
|
"net/http" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/zenazn/goji/web" |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
// EnvInit is a middleware that allocates an environment map if one does not
|
|
|
|
|
|
// already exist. This is necessary because Goji does not guarantee that Env is
|
|
|
|
|
|
// present when running middleware (it avoids forcing the map allocation). Note
|
|
|
|
|
|
// that other middleware should check Env for nil in order to maximize
|
|
|
|
|
|
// compatibility (when EnvInit is not used, or when another middleware layer
|
|
|
|
|
|
// blanks out Env), but for situations in which the user controls the middleware
|
|
|
|
|
|
// stack and knows EnvInit is present, this middleware can eliminate a lot of
|
|
|
|
|
|
// boilerplate.
|
|
|
|
|
|
func EnvInit(c *web.C, h http.Handler) http.Handler { |
|
|
|
|
|
fn := func(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
|
if c.Env == nil { |
|
|
|
|
|
c.Env = make(map[string]interface{}) |
|
|
|
|
|
} |
|
|
|
|
|
h.ServeHTTP(w, r) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return http.HandlerFunc(fn) |
|
|
|
|
|
} |