code: func RecoverMiddleware(next HandlerFunc) HandlerFunc {
  	fn := func(ctx *Context) {
  		defer func() {
  			if err := recover(); err != nil {
  				e := NewError(err)
  				httpRequest, _ := httputil.DumpRequest(ctx.Request, true)
  				log.Printf("[Recovery] panic recovered:\n%s\n%s\n%s", string(httpRequest), err, e.StackTraceString())
  				ctx.statusCode = 500
  				ctx.Abort(500, map[string]interface{}{
  					"Code":        ctx.statusCode,
  					"Title":       "Internal Server Error",
  					"HTTPRequest": string(httpRequest),
  					"Message":     e.Error(),
  					"StackTrace":  e.Stack,
  				})
  			}
  		}()
  		next(ctx)
  	}
  	return fn
  }
docs: // RecoverMiddleware is the built-in middleware for recovering from errors.