allow to use http middlewares

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
Василий Толстов 2021-02-07 13:27:28 +03:00
parent 1e4d56d059
commit dc1e05bb18
2 changed files with 23 additions and 2 deletions

12
http.go
View File

@ -375,7 +375,17 @@ func (h *httpServer) Start() error {
} }
} }
go http.Serve(ts, handler) fn := handler
if h.opts.Context != nil {
if mwf, ok := h.opts.Context.Value(middlewareKey{}).([]func(http.Handler) http.Handler); ok && len(mwf) > 0 {
// wrap the handler func
for i := len(mwf); i > 0; i-- {
fn = mwf[i-1](fn)
}
}
}
go http.Serve(ts, fn)
go func() { go func() {
t := new(time.Ticker) t := new(time.Ticker)

View File

@ -1,6 +1,11 @@
package http package http
import "context" import (
"context"
"net/http"
"github.com/unistack-org/micro/v3/server"
)
type rspCodeKey struct{} type rspCodeKey struct{}
type rspCodeVal struct { type rspCodeVal struct {
@ -22,3 +27,9 @@ func GetRspCode(ctx context.Context) int {
} }
return code return code
} }
type middlewareKey struct{}
func Middleware(mw ...func(http.Handler) http.Handler) server.Option {
return server.SetOption(middlewareKey{}, mw)
}