@@ -54,7 +54,6 @@ const (
5454 RunMode_Production = "production"
5555)
5656
57-
5857//New create and return DotApp instance
5958func New () * DotWeb {
6059 app := & DotWeb {
@@ -141,6 +140,19 @@ func (app *DotWeb) SetProductionMode() {
141140 logger .SetEnabledConsole (false )
142141}
143142
143+ // ExcludeUse registers a middleware exclude routers
144+ // like exclude /index or /query/:id
145+ func (app * DotWeb ) ExcludeUse (m Middleware , routers ... string ) {
146+ middlewareLen := len (app .Middlewares )
147+ if m != nil {
148+ m .Exclude (routers ... )
149+ if middlewareLen > 0 {
150+ app .Middlewares [middlewareLen - 1 ].SetNext (m )
151+ }
152+ app .Middlewares = append (app .Middlewares , m )
153+ }
154+ }
155+
144156// Use registers a middleware
145157func (app * DotWeb ) Use (m ... Middleware ) {
146158 step := len (app .Middlewares ) - 1
@@ -244,10 +256,14 @@ func (app *DotWeb) MustStart() {
244256// not support pprof server auto start
245257func (app * DotWeb ) ListenAndServe (addr string ) error {
246258 app .initAppConfig ()
247- app .initRegisterMiddleware ()
248- app .initRegisterRoute ()
249- app .initRegisterGroup ()
259+ app .initRegisterConfigMiddleware ()
260+ app .initRegisterConfigRoute ()
261+ app .initRegisterConfigGroup ()
262+
250263 app .initServerEnvironment ()
264+
265+ app .initBindMiddleware ()
266+
251267 app .initInnerRouter ()
252268
253269 if app .HttpServer .ServerConfig ().EnabledTLS {
@@ -300,8 +316,8 @@ func (app *DotWeb) initAppConfig() {
300316 }
301317}
302318
303- // init register Middleware
304- func (app * DotWeb ) initRegisterMiddleware () {
319+ // init register config's Middleware
320+ func (app * DotWeb ) initRegisterConfigMiddleware () {
305321 config := app .Config
306322 //register app's middleware
307323 for _ , m := range config .Middlewares {
@@ -314,8 +330,8 @@ func (app *DotWeb) initRegisterMiddleware() {
314330 }
315331}
316332
317- // init register route
318- func (app * DotWeb ) initRegisterRoute () {
333+ // init register config's route
334+ func (app * DotWeb ) initRegisterConfigRoute () {
319335 config := app .Config
320336 //load router and register
321337 for _ , r := range config .Routers {
@@ -335,8 +351,8 @@ func (app *DotWeb) initRegisterRoute() {
335351 }
336352}
337353
338- // init register route
339- func (app * DotWeb ) initRegisterGroup () {
354+ // init register config's route
355+ func (app * DotWeb ) initRegisterConfigGroup () {
340356 config := app .Config
341357 //support group
342358 for _ , v := range config .Groups {
@@ -371,6 +387,23 @@ func (app *DotWeb) initRegisterGroup() {
371387 }
372388}
373389
390+ // init bind app's middleware to router node
391+ func (app * DotWeb ) initBindMiddleware () {
392+ //add default httphandler with middlewares
393+ app .Use (& xMiddleware {})
394+
395+ router := app .HttpServer .Router ().(* router )
396+ for path , node := range router .allNodeMap {
397+ logger .Logger ().Debug ("DotWeb initBindMiddleware " + path + " " + fmt .Sprint (node ), LogTarget_HttpServer )
398+ node .appMiddlewares = app .Middlewares
399+ for _ , m := range node .appMiddlewares {
400+ if m .HasExclude () && m .ExistsExcludeRouter (node .fullPath ) {
401+ node .hasExcludeMiddleware = true
402+ }
403+ }
404+ }
405+ }
406+
374407// init inner routers
375408func (app * DotWeb ) initInnerRouter () {
376409 //默认支持pprof信息查看
@@ -416,9 +449,6 @@ func (app *DotWeb) initServerEnvironment() {
416449 app .HttpServer .SetRenderer (NewInnerRenderer ())
417450 }
418451
419- //add default httphandler with middlewares
420- app .Use (& xMiddleware {})
421-
422452 //start pprof server
423453 if app .Config .App .EnabledPProf {
424454 logger .Logger ().Debug ("DotWeb:StartPProfServer[" + strconv .Itoa (app .Config .App .PProfPort )+ "] Begin" , LogTarget_HttpServer )
0 commit comments