#### Version 1.4.1 · pythonAI/dotweb@db4ec74 · GitHub
Skip to content

Commit db4ec74

Browse files
author
pzrr@qq.com
committed
#### Version 1.4.1
* dotweb新增ExcludeUse接口,用于设置指定排除路由的中间件 * 重构Middleware实现,优化dotweb结构,重构部分内部函数名称 * Node新增AppMiddlewares与GroupMiddlewares,用于存储App级、Group级的中间件实例 * Middleware新增Exclude相关接口 * Exclude(routers ...string)函数,用于指定不生效的路由 * HasExclude() bool函数,用于判定当前中间件实例是否存在排除路由 * ExistsExcludeRouter(router string) bool函数,用于判定当前中间件实例的排除路由中是否存在指定路由 * middleware执行优先级: - 优先级1:app级别middleware - 优先级2:group级别middleware - 优先级:router级别middleware * 更新example/middleware * 2018-01-01 23:00:00
1 parent 1dbd538 commit db4ec74

6 files changed

Lines changed: 59 additions & 23 deletions

File tree

dotweb.go

Lines changed: 8 additions & 4 deletions

example/middleware/main.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@ func main() {
3030
//app.UseRequestLog()
3131
app.Use(
3232
NewAccessFmtLog("app"),
33-
NewAccessFmtLog("app2"),
34-
//NewSimpleAuth("admin"),
3533
)
34+
app.ExcludeUse(NewAccessFmtLog("appex"), "/", "/")
3635

3736
//启动 监控服务
3837
app.SetPProfConfig(true, 8081)

middleware.go

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ type Middleware interface {
2525
SetNext(m Middleware)
2626
Next(ctx Context) error
2727
Exclude(routers ...string)
28+
HasExclude() bool
29+
ExistsExcludeRouter(router string) bool
2830
}
2931

3032
//middleware 基础类,应用可基于此实现完整Moddleware
@@ -60,6 +62,12 @@ func (bm *BaseMiddlware) Next(ctx Context) error {
6062
return httpCtx.Handler()(ctx)
6163
}
6264
} else {
65+
//check exclude config
66+
if ctx.RouterNode().Node().hasExcludeMiddleware && bm.next.HasExclude() {
67+
if bm.next.ExistsExcludeRouter(ctx.RouterNode().Node().fullPath) {
68+
return bm.next.Next(ctx)
69+
}
70+
}
6371
return bm.next.Handle(ctx)
6472
}
6573
return nil
@@ -71,10 +79,29 @@ func (bm *BaseMiddlware) Exclude(routers ...string) {
7179
bm.excludeRouters = make(map[string]struct{})
7280
}
7381
for _, v := range routers {
74-
if _, exists := bm.excludeRouters[v]; !exists {
75-
bm.excludeRouters[v] = struct{}{}
76-
}
82+
bm.excludeRouters[v] = struct{}{}
83+
}
84+
}
85+
86+
// HasExclude check has set exclude router
87+
func (bm *BaseMiddlware) HasExclude() bool {
88+
if bm.excludeRouters == nil {
89+
return false
90+
}
91+
if len(bm.excludeRouters) > 0 {
92+
return true
93+
} else {
94+
return false
95+
}
96+
}
97+
98+
// ExistsExcludeRouter check is exists router in exclude map
99+
func (bm *BaseMiddlware) ExistsExcludeRouter(router string) bool {
100+
if bm.excludeRouters == nil {
101+
return false
77102
}
103+
_, exists := bm.excludeRouters[router]
104+
return exists
78105
}
79106

80107
type xMiddleware struct {

router.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@ func (r *router) add(method, path string, handle RouterHandle, m ...Middleware)
491491
}
492492
//fmt.Println("Handle => ", method, " - ", *root, " - ", path)
493493
outnode = root.addRoute(path, handle, m...)
494+
outnode.fullPath = path
494495
r.allNodeMap[method+"_"+path] = outnode
495496
return
496497
}

tree.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,19 @@ const (
4141
)
4242

4343
type Node struct {
44-
path string
45-
wildChild bool
46-
nType nodeType
47-
maxParams uint8
48-
indices string
49-
children []*Node
50-
appMiddlewares []Middleware
51-
groupMiddlewares []Middleware
52-
middlewares []Middleware
53-
handle RouterHandle
54-
priority uint32
44+
path string
45+
fullPath string
46+
hasExcludeMiddleware bool
47+
wildChild bool
48+
nType nodeType
49+
maxParams uint8
50+
indices string
51+
children []*Node
52+
appMiddlewares []Middleware
53+
groupMiddlewares []Middleware
54+
middlewares []Middleware
55+
handle RouterHandle
56+
priority uint32
5557
}
5658

5759
//Use registers a middleware

version.MD

Lines changed: 6 additions & 3 deletions

0 commit comments

Comments
 (0)