2016-10-22 3 views
0

Моего маршрута выглядит этотGorilla Mux Regex для числа между диапазоном и предопределенными вариантами

max := viper.GetInt("channels") 

lights_router.Path("/{channel}/{action}"). 
    Methods("OPTIONS","GET"). 
    Handler(util.Adapt(SerialHandler(router), util.EnableCORS())) 

каналы должны находиться в диапазоне от 1 до макс и действий должны быть либо ложными или истинными.

ответ

0
func ValidetaChannel() Adapter { 
    return func(h http.Handler) http.Handler { 
     return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
      channel, err := strconv.Atoi(mux.Vars(r)["channel"]) 
      if err != nil { 
       http.Error(w, http.StatusText(400), 400) 
       return 
      } 
      if channel >= 1 && channel <= viper.GetInt("channels") { 
       h.ServeHTTP(w, r) 
       return 
      } 
      http.Error(w, http.StatusText(400), 400) 

     }) 
    } 
} 


func ValidetaAction() Adapter { 
    return func(h http.Handler) http.Handler { 
     return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
      if mux.Vars(r)["action"] == "true" || mux.Vars(r)["action"] == "false" { 
       h.ServeHTTP(w, r) 
       return 
      } 
      http.Error(w, http.StatusText(400), 400) 
     }) 
    } 
} 
Смежные вопросы