Middleware to mechanizm, który pozwala na uruchomienie kodu przed lub po głównym kodzie obsługi w cyklu życia żądania HTTP. Może być on rozumiany jako haczyk w ramach frameworka przechwytujący wszystkie żądania i odpowiedzi.

Korzystanie z Middleware w iris

Można zarejestrować middleware do tras za pomocą metody Use w iris.

package main

// Importowanie pakietu
import "github.com/kataras/iris/v12"

func main() {
  // Definiowanie instancji iris
  app := iris.New()
  // Użycie middleware kompresji gzip
  app.Use(iris.Compression)

  // Ustawienia trasy
  app.Get("/", func(ctx iris.Context) {
    ctx.HTML("Witaj <strong>%s</strong>!", "Świecie")
  })

  // Nasłuchiwanie na porcie
  app.Listen(":8080")
}

Własny middleware w iris

// Sygnatura funkcji niestandardowego middleware
func Logger() iris.Handler {
    // Zwracanie handlera poprzez zamknięcie
    return func(ctx iris.Context) {
        t := time.Now()

        // Ustawianie parametrów
        ctx.Values().Set("framework", "iris")

        // Logika przed żądaniem

        ctx.Next()

        // Logika po żądaniu
        czasOczekiwania := time.Since(t)
        log.Print(czasOczekiwania)

        // Dostęp do wysłanego statusu
        status := ctx.GetStatusCode()
        log.Println(status)
    }
}

func main() {
    app := iris.New()
    // Rejestrowanie niestandardowego middleware
    app.Use(Logger())

    app.Get("/test", func(ctx iris.Context) {
        // Odczytywanie parametru ustawionego przez middleware
        framework := ctx.Values().GetString("framework")

        // Wydrukowałoby: "iris"
        log.Println(framework)
    })

    app.Listen(":8080")
}