Middleware - это механизм, который позволяет выполнять код до или после основного обработчика в жизненном цикле HTTP-запроса. Его можно понимать как крюк во фреймворке, перехватывающий все запросы и ответы.

Использование Middleware в iris

Вы можете зарегистрировать middleware для маршрутов через метод Use в iris.

package main

// Импорт пакета
import "github.com/kataras/iris/v12"

func main() {
  // Определение экземпляра iris
  app := iris.New()
  // Использование middleware сжатия gzip
  app.Use(iris.Compression)

  // Настройки маршрута
  app.Get("/", func(ctx iris.Context) {
    ctx.HTML("Привет <strong>%s</strong>!", "Мир")
  })

  // Прослушивание порта
  app.Listen(":8080")
}

Пользовательский Middleware в iris

// Подпись пользовательской функции middleware
func Logger() iris.Handler {
    // Возвращение обработчика через замыкание
    return func(ctx iris.Context) {
        t := time.Now()

        // Установка параметров
        ctx.Values().Set("framework", "iris")

        // Логика перед запросом

        ctx.Next()

        // Логика после запроса
        latency := time.Since(t)
        log.Print(latency)

        // Доступ к отправляемому статусу
        status := ctx.GetStatusCode()
        log.Println(status)
    }
}

func main() {
    app := iris.New()
    // Регистрация пользовательского middleware
    app.Use(Logger())

    app.Get("/test", func(ctx iris.Context) {
        // Чтение параметра, установленного middleware
        framework := ctx.Values().GetString("framework")

        // Это выведет: "iris"
        log.Println(framework)
    })

    app.Listen(":8080")
}