middlewares system added
parent
3a31598602
commit
0b354f22d3
11
main.go
11
main.go
|
@ -50,15 +50,20 @@ func setupRoutesAndRun(a *models.App) error {
|
||||||
func setupRoutes(a *models.App) *http.ServeMux {
|
func setupRoutes(a *models.App) *http.ServeMux {
|
||||||
router := http.NewServeMux()
|
router := http.NewServeMux()
|
||||||
|
|
||||||
|
// middlewares
|
||||||
|
m := controllers.MiddlewaresChain(
|
||||||
|
controllers.LoggingMiddleware,
|
||||||
|
)
|
||||||
|
|
||||||
// Обработка статических файлов с кэшированием
|
// Обработка статических файлов с кэшированием
|
||||||
router.Handle(a.Config.AssetsPath, controllers.StaticHandler())
|
router.Handle(a.Config.AssetsPath, m(controllers.StaticHandler()))
|
||||||
|
|
||||||
// Странички
|
// Странички
|
||||||
{
|
{
|
||||||
// Обработка главной страницы (русская версия)
|
// Обработка главной страницы (русская версия)
|
||||||
router.Handle("/ru/", controllers_pages.MainRuPageHandler(a))
|
router.Handle("/ru/", m(controllers_pages.MainRuPageHandler(a)))
|
||||||
// Обработка главной страницы
|
// Обработка главной страницы
|
||||||
router.Handle("/", controllers_pages.MainPageHandler(a))
|
router.Handle("/", m(controllers_pages.MainPageHandler(a)))
|
||||||
}
|
}
|
||||||
|
|
||||||
return router
|
return router
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Middleware func(http.Handler) http.Handler
|
||||||
|
|
||||||
|
/*
|
||||||
|
Возвращает один middleware, который объединяет все переданные
|
||||||
|
|
||||||
|
MiddlewaresChain(m1, m2, m3)
|
||||||
|
= func(next http.Handler) http.Handler { return m1(m2(m3(final))) }
|
||||||
|
|
||||||
|
MiddlewaresChain(LoggingMiddleware)
|
||||||
|
= func(next http.Handler) http.Handler { return LoggingMiddleware(final http.Handler) }
|
||||||
|
*/
|
||||||
|
func MiddlewaresChain(middlewares ...Middleware) Middleware {
|
||||||
|
return func(final http.Handler) http.Handler {
|
||||||
|
for i := len(middlewares) - 1; i >= 0; i-- {
|
||||||
|
final = middlewares[i](final)
|
||||||
|
}
|
||||||
|
return final
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoggingMiddleware(next http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
start := time.Now()
|
||||||
|
log.Printf("Started %s %s", r.Method, r.URL.Path)
|
||||||
|
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
|
|
||||||
|
log.Printf("Completed %s in %v", r.URL.Path, time.Since(start))
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue