emahiro/b.log

Drastically Repeat Yourself !!!!

chi で独自の middleware 使う

Overview

chi で独自 middleware を使う上で使い方を忘れていたのでその備忘録。

備忘録

router.Use(func(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // middleware でやりたい処理
        next.ServeHTTP(w, r) // これがないと次の router に処理が伝播しない
    })
})

middleware 内部で ServeHTTP しないと実際の処理をしてる handler まで処理が伝播しないことを忘れていて時間を溶かしてしまった。

ちなみに以下のような感じで前処理と後処理に分けることができる。

router.Use(func(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // handler の前処理
        next.ServeHTTP(w, r)
        // handler の後処理
    })
})