/
githubmirror
/
GoFrame
Обзор
Документация
Войти
/
githubmirror
/
GoFrame
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
net/gclient/gclient_middleware.go
50 строк
1 KB
John Guo
improve package gclient for constants
10 янв 2022, 11:42
10 янв 2022, 11:42
d4cb166
Код
Авторство
О чём код?
package gclient import ( "net/http" "github.com/gogf/gf/v2/os/gctx" ) // HandlerFunc middleware handler func type HandlerFunc = func(c *Client, r *http.Request) (*Response, error) // clientMiddleware is the plugin for http client request workflow management. type clientMiddleware struct { client *Client // http client. handlers []HandlerFunc // mdl handlers. handlerIndex int // current handler index. resp *Response // save resp. err error // save err. } const clientMiddlewareKey gctx.StrKey = "__clientMiddlewareKey" // Use adds one or more middleware handlers to client. func (c *Client) Use(handlers ...HandlerFunc) *Client { c.middlewareHandler = append(c.middlewareHandler, handlers...) return c } // Next calls the next middleware. // This should only be call in HandlerFunc. func (c *Client) Next(req *http.Request) (*Response, error) { if v := req.Context().Value(clientMiddlewareKey); v != nil { if m, ok := v.(*clientMiddleware); ok { return m.Next(req) } } return c.callRequest(req) } // Next calls the next middleware handler. func (m *clientMiddleware) Next(req *http.Request) (resp *Response, err error) { if m.err != nil { return m.resp, m.err } if m.handlerIndex < len(m.handlers) { m.handlerIndex++ m.resp, m.err = m.handlers[m.handlerIndex](m.client, req) } return m.resp, m.err }