Documentation ¶
Overview ¶
Package middleware 实现eudore基础请求中间件和处理函数。
BasicAuth ¶
实现请求BasicAuth访问认证
参数:
map[string]string 允许的用户名和密码的键值对map。
example:
app.AddMiddleware(middleware.NewBasicAuthFunc(map[string]string{"user": "pw"}))
BodyLimit ¶
限制请求body大小
参数:
int64 指定限制body的长度
examole:
app.AddMiddleware(middleware.NewBodyLimitFunc(32 << 20))
Black ¶
实现黑白名单管理及管理后台
参数:
map[string]bool 指明初始化使用的黑白名单,true为白白名单/false为黑名单 eudore.Router 为注入黑名单管理路由的路由器。
example:
app.AddMiddleware(middleware.NewBlackFunc(map[string]bool{ "192.168.100.0/24": true, "192.168.75.0/30": true, "192.168.1.100/30": true, "127.0.0.1/32": true, "10.168.0.0/16": true, "0.0.0.0/0": false, }, app.Group("/eudore/debug")))
Breaker ¶
实现路由规则熔断
参数:
eudore.Router
属性:
MaxConsecutiveSuccesses uint32 最大连续成功次数 MaxConsecutiveFailures uint32 最大连续失败次数 OpenWait time.Duration 打开状态恢复到半开状态下等待时间 NewHalfOpen func(string) func() bool 创建一个路由规则半开状态下的限流函数
example:
app.AddMiddleware(middleware.NewBreakerFunc(app.Group("/eudore/debug"))) breaker := middleware.NewBreaker() breaker.OpenWait = 0 app.AddMiddleware(breaker.NewBreakerFunc(app.Group("/eudore/debug")))
在关闭状态下连续错误一定次数后熔断器进入半开状态;在半开状态下请求将进入限流状态,半开连续错误一定次数后进入打开状态,半开连续成功一定次数后回到关闭状态;在进入关闭状态后等待一定时间后恢复到半开状态。
Cache ¶
创建一个缓存中间件,对Get请求具有缓存和SingleFlight双重效果。
参数:
context.Context 控制默认cacheMap清理过期数据的生命周期 time.Duration 请求数据缓存时间,默认秒 cacheStore 缓存存储对象
example:
app.AddMiddleware(middleware.NewCacheFunc(time.Second*10, app.Context))
Compress ¶
创建响应压缩中间件,默认提供gzip和deflate压缩 参数:
string 压缩名称 func() any 压缩器创建函数 int 压缩级别
example:
import: "github.com/andybalholm/brotli" app.AddMiddleware(middleware.NewCompressMixinsFunc(nil)) app.AddMiddleware(middleware.NewCompressFunc("br", func() any { return brotli.NewWriter(io.Discard) })) app.AddMiddleware(middleware.NewCompressGzipFunc()) app.AddMiddleware(middleware.NewCompressDeflateFunc())
ContextWarp ¶
使中间件之后的处理函数使用的eudore.Context对象为新的Context
参数:
func(eudore.Context) eudore.Context 指定ContextWarp使用的eudore.Context封装函数
example:
app.AddMiddleware(middleware.NewContextWarpFunc(newContextParams)) func newContextParams(ctx eudore.Context) eudore.Context { return contextParams{ctx} }
Cors ¶
跨域请求
参数:
[]string 允许使用的origin,默认值为:[]string{"*"} map[string]string CORS验证通过后给请求添加的协议headers,用来设置CORS控制信息
example:
app.AddMiddleware("global", middleware.NewCorsFunc([]string{"www.*.com", "example.com", "127.0.0.1:*"}, map[string]string{ "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Headers": "Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Parent-Id", "Access-Control-Expose-Headers": "X-Request-Id", "access-control-allow-methods": "GET, POST, PUT, DELETE, HEAD", "access-control-max-age": "1000", }))
Cors中间件注册不是全局中间件时,需要最后注册一次Options /*或404方法,否则Options请求匹配了默认404没有经过Cors中间件处理。
Csrf ¶
校验设置CSRF token
参数:
any 指明获取csrf token的方法,下列是允许使用的值 - "csrf" - "query: csrf" - "header: X-CSRF-Token" - "form: csrf" - func(ctx eudore.Context) string {return ctx.Query("csrf")} - nil any 指明设置Cookie的基础信息,下列是允许使用的值 - "csrf" - http.Cookie{Name: "csrf"} - nil
example:
app.AddMiddleware(middleware.NewCsrfFunc("csrf", nil))
Dump ¶
截取请求信息的中间件,将匹配请求使用webscoket输出给客户端。
参数:
router参数是eudore.Router类型,然后注入拦截路由处理。
example:
app.AddMiddleware(middleware.NewDumpFunc(app.Group("/eudore/debug")))
Header ¶
添加响应Header
参数:
http.Header 需要添加的Header内存
examaple:
app.AddMiddleware(middleware.NewHeaderFunc(http.Header{ "Cache-Control": []string{"no-cache"}, })) app.AddMiddleware(middleware.NewHeaderWithSecureFunc(nil))
HeaderFilte ¶
对来源于外部ip请求,过滤指定请求header
参数:
[]string 指定内部ip,默认[]string{"10.0.0.0/8", "172.16.0.0/12", "192.0.0.0/24", "127.0.0.1"} []string 指定需要过滤的请求header,默认[]string{HeaderXRealIP, HeaderXForwardedFor, HeaderXForwardedHost, HeaderXForwardedProto, HeaderXRequestID, HeaderXTraceID}
examaple:
app.AddMiddleware(middleware.NewHeaderFilteFunc(nil, nil)) app.AddMiddleware(middleware.NewHeaderFilteFunc([]string{"127.0.0.1"}, nil))
Logger ¶
输出请求access logger并记录相关fields
参数:
eudore.App 指定App对象,需要使用App.Logger输出日志。 ...string 指定额外添加的Params值,如果值非空则会加入到access logger fields中
example:
app.AddMiddleware(middleware.NewLoggerFunc(app, "route"))
Rate ¶
实现请求令牌桶限流
参数:
int 每周期(默认秒)增加speed个令牌 int 最多拥有的令牌数量 ...any 额外使用的Options,根据类型来断言设置选项 context.Context => 控制cleanupVisitors退出的生命周期 time.Duration => 基础时间周期单位,默认秒 func(eudore.Context) string => 限流获取key的函数,默认Context.ReadIP
example:
// 限流 每秒一个请求,最多保存3个请求 app.AddMiddleware(middleware.NewRateRequestFunc(1, 3, app.Context)) // 限速 每秒32Kb流量,最多保存128Kb流量 app.AddMiddleware(middleware.NewRateSpeedFunc(32*1024, 128*1024, app.Context))
Recover ¶
恢复panic抛出的错误,并输出日志、返回异常响应
example:
app.AddMiddleware(middleware.NewRecoverFunc())
Referer ¶
检查请求Referer Header值是否有效
参数:
map[string]bool 设置referer值是否有效 "" => 其他值未匹配时使用的默认值。 "origin" => 请求Referer和Host同源情况下,检查host为referer前缀,origin检查在其他值检查之前。 "*" => 任意域名端口 "www.eudore.cn/*" => www.eudore.cn域名全部请求,不指明http或https时为同时包含http和https "www.eudore.cn/api/*" => www.eudore.cn域名全部/api/前缀的请求 "https://www.eudore.cn/*" => www.eudore.cn仅匹配https。
example:
app.AddMiddleware(middleware.NewRefererFunc(map[string]bool{ "": true, "origin": false, "www.eudore.cn/*": true, "www.eudore.cn/api/*": false, "www.example.com/*": true, }))
RequestID ¶
给请求、响应、日志设置一个请求ID
参数:
func() string 用于创建一个请求ID,默认使用时间戳随机数
example:
app.AddMiddleware(middleware.NewRequestIDFunc(nil))
Rewrite ¶
重写请求路径,需要注册全局中间件
参数:
map[string]string 请求匹配模式对应的目标模式
example:
app.AddMiddleware("global", middleware.NewRewriteFunc(map[string]string{ "/js/*": "/public/js/$0", "/d/*": "/d/$0-$0", "/api/v1/*": "/api/v3/$0", "/api/v2/*": "/api/v3/$0", "/help/history*": "/api/v3/history", "/help/history": "/api/v3/history", "/help/*": "$0", }))
Router ¶
用于执行额外的路由匹配行为
参数:
map[string]any 请求路径对应的执行函数,路径前缀不指定方法则为Any方法
example:
app.AddMiddleware(middleware.NewRouterFunc(map[string]any{ "/api/:v/*": func(ctx eudore.Context) { ctx.Request().URL.Path = "/api/v3/" + ctx.GetParam("*") }, "GET /api/:v/*": func(ctx eudore.Context) { ctx.WriteHeader(403) ctx.End() }, }))
RouterRewrite ¶
基于Router中间件实现路由重写,参考Rewrite
example:
app.AddMiddleware("global", middleware.NewRouterRewriteFunc(map[string]string{ "/js/*": "/public/js/$0", "/d/*": "/d/$0-$0", "/api/v1/*": "/api/v3/$0", "/api/v2/*": "/api/v3/$0", "/help/history*": "/api/v3/history", "/help/history": "/api/v3/history", "/help/*": "$0", }))
Timeout ¶
设置请求处理超时时间,如果超时返回503状态码并取消context,
实现难点:写入中超时状态码异常、panic栈无法捕捉信息异常、http.Header并发读写、sync.Pool回收了Context、Context数据竟态检测
Index ¶
- Constants
- Variables
- func HandlerAdmin(ctx eudore.Context)
- func HandlerExpvar(ctx eudore.Context)
- func HandlerPporfIndex(ctx eudore.Context)
- func HandlerPprof(ctx eudore.Context)
- func HandlerPprofGoroutine(ctx eudore.Context)
- func NewBasicAuthFunc(names map[string]string) eudore.HandlerFunc
- func NewBindLook(renders map[string]eudore.HandlerDataFunc) eudore.HandlerDataFunc
- func NewBlackFunc(data map[string]bool, router eudore.Router) eudore.HandlerFunc
- func NewBodyLimitFunc(size int64) eudore.HandlerFunc
- func NewBreakerFunc(router eudore.Router) eudore.HandlerFunc
- func NewCacheFunc(args ...any) eudore.HandlerFunc
- func NewCompressDeflateFunc() eudore.HandlerFunc
- func NewCompressFunc(name string, fn func() any) eudore.HandlerFunc
- func NewCompressGzipFunc() eudore.HandlerFunc
- func NewCompressMixinsFunc(compresss map[string]func() any) eudore.HandlerFunc
- func NewContextWarpFunc(fn func(eudore.Context) eudore.Context) eudore.HandlerFunc
- func NewCorsFunc(pattens []string, headers map[string]string) eudore.HandlerFunc
- func NewCsrfFunc(key, cookie any) eudore.HandlerFunc
- func NewDumpFunc(router eudore.Router) eudore.HandlerFunc
- func NewHalfOpenTicker(t time.Duration) func(string) func() bool
- func NewHeaderFilteFunc(iplist, names []string) eudore.HandlerFunc
- func NewHeaderFunc(h http.Header) eudore.HandlerFunc
- func NewHeaderWithSecureFunc(h http.Header) eudore.HandlerFunc
- func NewLoggerFunc(log eudore.Logger, params ...string) eudore.HandlerFunc
- func NewLoggerLevelFunc(fn func(ctx eudore.Context) int) eudore.HandlerFunc
- func NewLookFunc(data any) eudore.HandlerFunc
- func NewNetHTTPBasicAuthFunc(next http.Handler, names map[string]string) http.HandlerFunc
- func NewNetHTTPBlackFunc(next http.Handler, data map[string]bool) http.HandlerFunc
- func NewNetHTTPBodyLimitFunc(next http.Handler, size int64) http.HandlerFunc
- func NewNetHTTPRateRequestFunc(next http.Handler, speed, max int64, options ...any) http.HandlerFunc
- func NewNetHTTPRewriteFunc(next http.Handler, data map[string]string) http.HandlerFunc
- func NewRateRequestFunc(speed, max int64, options ...any) eudore.HandlerFunc
- func NewRateSpeedFunc(speed, max int64, options ...any) eudore.HandlerFunc
- func NewRecoverFunc() eudore.HandlerFunc
- func NewRefererFunc(data map[string]bool) eudore.HandlerFunc
- func NewRequestIDFunc(fn func(eudore.Context) string) eudore.HandlerFunc
- func NewRewriteFunc(data map[string]string) eudore.HandlerFunc
- func NewRouterFunc(data map[string]any) eudore.HandlerFunc
- func NewRouterRewriteFunc(data map[string]string) eudore.HandlerFunc
- func RenderValueHTML(ctx eudore.Context, data any) error
- func RenderValueJSON(ctx eudore.Context, data any) error
- func RenderValueText(ctx eudore.Context, data any) error
- type BlackInfo
- type BlackNode
- type Breaker
- type BreakerState
- type CacheData
- type CacheStore
- type LookConfig
- type LookValue
Constants ¶
const ( CompressBufferLength = 1024 CompressStateUnknown = iota CompressStateBuffer CompressStateEnable CompressStateDisable CompressNameGzip = "gzip" CompressNameBrotli = "br" CompressNameDeflate = "deflate" CompressNameIdentity = "identity" MimeValueJSON = "value/json" MimeValueHTML = "value/html" MimeValueText = "value/text" QueryFormatJSON = "json" QueryFormatHTML = "html" QueryFormatText = "text" )
Variables ¶
var ( // DefaultBlackInvalidAddress 定义解析无效地址时使用的默认地址,127.0.0.2。 DefaultBlackInvalidAddress uint64 = 2130706434 DefaultCacheSaveTime = time.Second * 10 // DefaultComoressBrotliFunc 指定brotli压缩构造函数。 // // import "github.com/andybalholm/brotli" // // middleware.DefaultComoressBrotliFunc = func() any {return brotli.NewWriter(io.Discard)} . DefaultComoressBrotliFunc func() any DefaultComoressDisableMime = map[string]bool{ "application/gzip": true, "application/zip": true, "application/x-compressed-tar": true, "application/x-7z-compressed": true, "application/x-rar-compressed": true, "image/gif": true, "image/jpeg": true, "image/png": true, "image/svg+xml": true, "image/webp": true, "font/woff2": true, } DefaultPprofHandlers = map[string]http.Handler{ "cmdline": http.HandlerFunc(pprof.Cmdline), "profile": http.HandlerFunc(pprof.Profile), "symbol": http.HandlerFunc(pprof.Symbol), "trace": http.HandlerFunc(pprof.Trace), "allocs": pprof.Handler("allocs"), "block": pprof.Handler("block"), "heap": pprof.Handler("heap"), "mutex": pprof.Handler("mutex"), "threadcreate": pprof.Handler("threadcreate"), } ErrRateReadWaitLong = errors.New("if the github.com/eudore/eudore/middleware speed limit waiting time is too long, it will time out") ErrRateWriteWaitLong = errors.New("if the github.com/eudore/eudore/middleware speed limit waits for write time is too long, it will wait for timeout") )
var AdminStatic = adminStatic
AdminStatic 定义admin.html内容
var BreakerStatues = []string{"closed", "half-open", "open"}
BreakerStatues 定义熔断状态字符串。
Functions ¶
func HandlerPporfIndex ¶
HandlerPporfIndex 函数处理pprof index页面,返回index消息,响应format=text/json/html三种格式。
func HandlerPprof ¶
HandlerPprof 处理pprof请求,路由注册路径必须以/*结尾,使用*获取处理函数。
func HandlerPprofGoroutine ¶
HandlerPprofGoroutine 函数处理pprof Goroutine数据,响应format=text/json/html三种格式。
func NewBasicAuthFunc ¶
func NewBasicAuthFunc(names map[string]string) eudore.HandlerFunc
NewBasicAuthFunc 创建一个Basic auth认证中间件。
names为保存用户密码的map。
注意: BasicAuth需要放置在CORS之后。
func NewBindLook ¶
func NewBindLook(renders map[string]eudore.HandlerDataFunc) eudore.HandlerDataFunc
NewBindLook 函数创建支持look value的eudore.NewRenders。
func NewBlackFunc ¶
NewBlackFunc 函数创建一个黑名单处理函数,传入map[string]bool类型参数记录初始化使用的黑/白名单,白名单值为true/黑名单值为false。
func NewBodyLimitFunc ¶
func NewBodyLimitFunc(size int64) eudore.HandlerFunc
NewBodyLimitFunc 函数创建显示请求body长度的处理中间件。
func NewBreakerFunc ¶
func NewBreakerFunc(router eudore.Router) eudore.HandlerFunc
NewBreakerFunc 函数创建一个路由熔断器处理函数。
func NewCacheFunc ¶
func NewCacheFunc(args ...any) eudore.HandlerFunc
NewCacheFunc 函数创建一个缓存中间件,对Get请求具有缓存和SingleFlight双重效果, 无法获得中间件之前的响应header数据。
options:
context.Context => 控制默认cacheMap清理过期数据的生命周期。 time.Duration => 请求数据缓存时间,默认秒。 func(eudore.Context) string => 自定义缓存key,为空则跳过缓存。 CacheStore => 缓存存储对象。
func NewCompressDeflateFunc ¶
func NewCompressDeflateFunc() eudore.HandlerFunc
NewCompressDeflateFunc 函数创建一个deflate压缩处理函数。
func NewCompressFunc ¶
func NewCompressFunc(name string, fn func() any) eudore.HandlerFunc
NewCompressFunc 函数创建一个压缩处理函数,需要指定压缩算法和压缩对象构造函数。
func NewCompressGzipFunc ¶
func NewCompressGzipFunc() eudore.HandlerFunc
NewCompressGzipFunc 函数创建一个gzip压缩处理函数。
func NewCompressMixinsFunc ¶
func NewCompressMixinsFunc(compresss map[string]func() any) eudore.HandlerFunc
NewCompressMixinsFunc 函数创建一个混合压缩处理函数,默认具有gzip、defalte。
如果压缩ResponseWriter.Size()值为压缩后size。
如果设置middleware.DefaultComoressBrotliFunc指定brotli压缩函数,追加br压缩。
HeaderAcceptEncoding值忽略非零权重值,顺序优先。
func NewContextWarpFunc ¶
NewContextWarpFunc 函数中间件使之后的处理函数使用的eudore.Context对象为新的Context。
装饰器下可以直接对Context进行包装, 而责任链下无法修改Context主体故设计该中间件作为中间件执行机制补充。
func NewCorsFunc ¶
func NewCorsFunc(pattens []string, headers map[string]string) eudore.HandlerFunc
NewCorsFunc 函数创建一个Cors处理函数。
pattens是允许的origin,headers是跨域验证成功的添加的headers,例如:"Access-Control-Allow-Credentials"、"Access-Control-Allow-Headers"等。
如果pattens为空,允许任意origin。 如果Access-Control-Allow-Methods header为空,设置为*。
Cors中间件注册不是全局中间件时,需要最后注册一次Options /*或404方法,否则Options请求匹配了默认404没有经过Cors中间件处理。
func NewCsrfFunc ¶
func NewCsrfFunc(key, cookie any) eudore.HandlerFunc
NewCsrfFunc 函数创建一个Csrf处理函数,key指定请求带有crsf参数的关键字,cookie是csrf设置cookie的基本详细。
key value:
"csrf" "query: csrf" "header: X-CSRF-Token" "form: csrf" func(ctx eudore.Context) string {return ctx.Query("csrf")} nil
cookie value:
"csrf" http.Cookie{Name: "csrf"} nil
func NewDumpFunc ¶
func NewDumpFunc(router eudore.Router) eudore.HandlerFunc
NewDumpFunc 函数创建一个截取请求信息的中间件,将匹配请求使用webscoket输出给客户端。
router参数是eudore.Router类型,然后注入拦截路由处理。
注意:dump在集群模式下只能连接到一个server。
func NewHalfOpenTicker ¶
NewHalfOpenTicker 函数创建一个方法再半开状态下,周期允许通过一个请求。
func NewHeaderFilteFunc ¶
func NewHeaderFilteFunc(iplist, names []string) eudore.HandlerFunc
NewHeaderFilteFunc 函数创建请求header过滤中间件,对来源于外部ip请求,过滤指定header。
func NewHeaderFunc ¶
func NewHeaderFunc(h http.Header) eudore.HandlerFunc
NewHeaderFunc 函数创建响应header写入中间件。
func NewHeaderWithSecureFunc ¶
func NewHeaderWithSecureFunc(h http.Header) eudore.HandlerFunc
NewHeaderWithSecureFunc 函数创建响应header写入中间件,并额外附加基本安全header。
func NewLoggerFunc ¶
func NewLoggerFunc(log eudore.Logger, params ...string) eudore.HandlerFunc
NewLoggerFunc 函数创建一个请求日志记录中间件。
log参数设置用于输出eudore.Logger, params获取Context.Params如果不为空则添加到输出日志条目中
状态码如果为50x输出日志级别为Error。
func NewLoggerLevelFunc ¶
func NewLoggerLevelFunc(fn func(ctx eudore.Context) int) eudore.HandlerFunc
NewLoggerLevelFunc 函数创建一个设置一次请求日志级别的中间件。
通过一个函数处理请求,返回一个0-4,代表日志级别Debug-Fatal,默认处理函数使用debug参数转换成日志级别数字。
func NewLookFunc ¶
func NewLookFunc(data any) eudore.HandlerFunc
NewLookFunc 函数创建一个访问对象数据处理函数。
如果参数类型为func(eudore.Context) any,可以动态返回需要渲染的数据。
获取请求路由参数"*"为object访问路径,返回object指定属性的数据,允许使用下列参数:
d=10 depth递归显时最大层数; all=false 是否显时非导出属性; format=html/json/text 设置数据显示格式; godoc=https://golang.org 设置html格式链接的godoc服务地址; width=60 设置html格式缩进宽度。
func NewNetHTTPBasicAuthFunc ¶
NewNetHTTPBasicAuthFunc 函数创建一个net/http BasicAuth中间件处理函数,文档见NewBasicAuthFunc函数。
func NewNetHTTPBlackFunc ¶
NewNetHTTPBlackFunc 函数创建一个net/http黑名单中间件处理函数,文档见NewBlackFunc函数。
func NewNetHTTPBodyLimitFunc ¶
func NewNetHTTPBodyLimitFunc(next http.Handler, size int64) http.HandlerFunc
NewNetHTTPBodyLimitFunc 函数创建一个net/http BodyLimt中间件处理函数,优化NoBody和Size。
func NewNetHTTPRateRequestFunc ¶
func NewNetHTTPRateRequestFunc(next http.Handler, speed, max int64, options ...any) http.HandlerFunc
NewNetHTTPRateRequestFunc 函数创建一个net/http限流中间件处理函数,文档见NewRateFunc函数。
func NewNetHTTPRewriteFunc ¶
NewNetHTTPRewriteFunc 函数创建一个net/http路径重写中间件处理函数,文档见NewRewriteFunc函数。
func NewRateRequestFunc ¶
func NewRateRequestFunc(speed, max int64, options ...any) eudore.HandlerFunc
NewRateRequestFunc 返回一个限流处理函数。
每周期(默认秒)增加speed个令牌,最多拥有max个。
options:
context.Context => 控制cleanupVisitors退出的生命周期
time.Duration => 基础时间周期单位,默认秒
func(eudore.Context) string => 限流获取key的函数,默认Context.ReadIP。
func NewRateSpeedFunc ¶
func NewRateSpeedFunc(speed, max int64, options ...any) eudore.HandlerFunc
NewRateSpeedFunc 函数创建一个限速处理函数,不区分上下行流量。
speed为速度(byte),max为默认初始化流量值,参数参考NewRateRequestFunc。
speed速度不要小于通常Reader的缓冲区大小(最好大于4kB 4096),否则无法请求到住够的令牌导致阻塞。
Read时先请求缓冲区大小数量的令牌,然后返还未使用的令牌数量;Write时请求写入数据长度数量的令牌。
func NewRefererFunc ¶
func NewRefererFunc(data map[string]bool) eudore.HandlerFunc
NewRefererFunc 函数创建Referer header检查中间件,如果不指定协议匹配http和https,默认拒绝。
阅览器发送Referer值受html meta name referrer和Response Header Referrer-Policy影响。
"origin" => 请求Referer和Host同源情况下,检查host为referer前缀,origin检查在其他值检查之前。
"*" => 任意域名端口,包含无Referer值。
"www.eudore.cn/*" => www.eudore.cn域名全部请求,不指明http或https时为同时包含http和https。
"www.eudore.cn:*/*" => www.eudore.cn任意端口的全部请求,不包含没有指明端口的情况。
"www.eudore.cn/api/*" => www.eudore.cn域名全部/api/前缀的请求。
"https://www.eudore.cn/*" => www.eudore.cn仅匹配https。
func NewRequestIDFunc ¶
func NewRequestIDFunc(fn func(eudore.Context) string) eudore.HandlerFunc
NewRequestIDFunc 函数创建一个请求ID注入处理函数,不给定请求ID创建函数, 默认使用时间戳和随机数,会将request-id写入协议和附加到日志field。
func NewRewriteFunc ¶
func NewRewriteFunc(data map[string]string) eudore.HandlerFunc
NewRewriteFunc 函数创建一个请求路径重写处理函数,当前默认使用树匹配实现。
匹配路径中使用'*'代表当前位置到下一个'/'匹配内容,如果'*'在结尾表示任意字符串
目标路径中$0到$9表示匹配路径中'*'出现位置匹配到的字符串,最多匹配10个'*',否在解析错误。
"/js/*" => "/public/js*"
"/api/v1/*" => "/api/v3/$0"
"/api/v1/users/*/orders/*" => "/api/v3/user/$0/order/$1"
"/d/*" => "/d/$0-$0"
若运行出现`panic: runtime error: index out of range`,请检测'$?'的值是否超出了'*'数量。
func NewRouterFunc ¶
func NewRouterFunc(data map[string]any) eudore.HandlerFunc
NewRouterFunc 函数创建一个路由器中间件,将根据路由路径匹配执行对应的多个处理函数。
如果key为"router",val类型为eudore.Router,则使用改路由器处理请求。
func NewRouterRewriteFunc ¶
func NewRouterRewriteFunc(data map[string]string) eudore.HandlerFunc
NewRouterRewriteFunc 函数创建一个根据Router中间件实现的请求路径重写中间件。
RouterRewrite中间件使用参数和Rewrite中间件完全相同。
func RenderValueHTML ¶
RenderValueHTML 实现渲染Value为HTML格式。
func RenderValueJSON ¶
RenderValueJSON 实现渲染Value为JSON格式。
Types ¶
type BlackInfo ¶
type BlackInfo struct { Addr string `alias:"addr" json:"addr"` Mask uint64 `alias:"mask" json:"mask"` Count uint64 `alias:"count" json:"count"` }
BlackInfo 定义黑名单规则信息。
type BlackNode ¶
BlackNode 定义黑名单存储树节点。
type Breaker ¶
type Breaker struct { sync.RWMutex `json:"-"` Index int `json:"index"` Mapping map[int]string `json:"mapping"` Routes map[string]*breakRoute `json:"routes"` MaxConsecutiveSuccesses uint32 `json:"maxconsecutivesuccesses"` MaxConsecutiveFailures uint32 `json:"maxconsecutivefailures"` OpenWait time.Duration `json:"openwait"` NewHalfOpen func(string) func() bool `json:"-"` }
Breaker 定义熔断器。
func (*Breaker) NewBreakerFunc ¶
func (b *Breaker) NewBreakerFunc(router eudore.Router) eudore.HandlerFunc
NewBreakerFunc 方法定义熔断器处理eudore请求上下文函数。
type BreakerState ¶
type BreakerState int8
BreakerState 是熔断器状态。
const ( BreakerStatueClosed BreakerState = iota BreakerStatueHalfOpen BreakerStatueOpen )
定义熔断器状态。
func (BreakerState) MarshalText ¶
func (state BreakerState) MarshalText() (text []byte, err error)
MarshalText 方法实现encoding.TextMarshaler接口。
type CacheData ¶
type CacheData struct { Expired time.Time ModifiedTime string Status int Header http.Header Body []byte }
CacheData 定义缓存的数据类型。
type LookConfig ¶
type LookConfig struct { Depth int `json:"-"` ShowAll bool `json:"-"` Godoc string `json:"-"` Refs map[uintptr]struct{} `json:"-"` }
LookConfig 定义属性遍历的配置。
type LookValue ¶
type LookValue struct { *LookConfig `json:"-"` Kind string `json:"kind"` Package string `json:"package,omitempty"` Name string `json:"name,omitempty"` Value any `json:"value,omitempty"` String string `json:"string,omitempty"` Pointer uintptr `json:"pointer,omitempty"` Elem *LookValue `json:"elem,omitempty"` Keys []string `json:"keys,omitempty"` Vals []LookValue `json:"vals,omitempty"` }
LookValue 定义数据的每一项属性。
func NewLookValue ¶
NewLookValue 方法从请求上下文成就一个默认配置的LookValue。