Skip to content

Commit 3faab9e

Browse files
committed
fix: trying to solve a bug where the parent router doesn't pass its middlewares to its groups routers (part III)
1 parent fb7381c commit 3faab9e

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

http/route/router.go

+27-15
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,15 @@ type (
3737
NewGroup(
3838
pattern string,
3939
middlewares ...func(next http.Handler) http.Handler,
40-
) *Router
41-
RegisterGroup(router *Router)
40+
) RouterWrapper
41+
RegisterGroup(router RouterWrapper)
4242
Pattern() string
4343
RelativePath() string
4444
FullPath() string
4545
Method() string
4646
ServeStaticFiles(pattern, path string)
47+
Logger() *Logger
48+
Mode() *goflagsmode.Flag
4749
}
4850

4951
// Router is the route group struct
@@ -95,7 +97,7 @@ func NewRouter(
9597
mode *goflagsmode.Flag,
9698
logger *Logger,
9799
middlewares ...func(next http.Handler) http.Handler,
98-
) (*Router, error) {
100+
) (RouterWrapper, error) {
99101
// Split the method and path from the pattern
100102
method, path, err := SplitPattern(pattern)
101103
if err != nil {
@@ -133,16 +135,16 @@ func NewBaseRouter(
133135
mode *goflagsmode.Flag,
134136
logger *Logger,
135137
middlewares ...func(next http.Handler) http.Handler,
136-
) (*Router, error) {
138+
) (RouterWrapper, error) {
137139
return NewRouter("/", mode, logger, middlewares...)
138140
}
139141

140142
// NewGroup creates a new router group
141143
func NewGroup(
142-
baseRouter *Router,
144+
baseRouter RouterWrapper,
143145
pattern string,
144146
middlewares ...func(next http.Handler) http.Handler,
145-
) (*Router, error) {
147+
) (RouterWrapper, error) {
146148
// Check if the base router is nil
147149
if baseRouter == nil {
148150
return nil, ErrNilRouter
@@ -156,12 +158,12 @@ func NewGroup(
156158

157159
// Check the base router path
158160
var fullPath string
159-
if relativePath == "/" && baseRouter.fullPath == "/" {
161+
if relativePath == "/" && baseRouter.FullPath() == "/" {
160162
fullPath = "/"
161-
} else if baseRouter.fullPath[len(baseRouter.fullPath)-1] == '/' {
162-
fullPath = baseRouter.fullPath + relativePath[1:]
163+
} else if baseRouter.FullPath()[len(baseRouter.FullPath())-1] == '/' {
164+
fullPath = baseRouter.FullPath() + relativePath[1:]
163165
} else {
164-
fullPath = baseRouter.fullPath + relativePath
166+
fullPath = baseRouter.FullPath() + relativePath
165167
}
166168

167169
// Initialize the multiplexer
@@ -191,12 +193,12 @@ func NewGroup(
191193
middlewares: allMiddlewares,
192194
firstHandler: firstHandler,
193195
mux: mux,
194-
logger: baseRouter.logger,
196+
logger: baseRouter.Logger(),
195197
pattern: pattern,
196198
relativePath: relativePath,
197199
fullPath: fullPath,
198200
method: method,
199-
mode: baseRouter.mode,
201+
mode: baseRouter.Mode(),
200202
}
201203

202204
// Register the group
@@ -301,15 +303,15 @@ func (r *Router) RegisterHandler(pattern string, handler http.Handler) {
301303
}
302304

303305
// RegisterGroup registers a new router group with a path and a router
304-
func (r *Router) RegisterGroup(router *Router) {
305-
r.RegisterHandler(router.Pattern(), router.mux)
306+
func (r *Router) RegisterGroup(router RouterWrapper) {
307+
r.RegisterHandler(router.Pattern(), router.Mux())
306308
}
307309

308310
// NewGroup creates a new router group with a path
309311
func (r *Router) NewGroup(
310312
pattern string,
311313
middlewares ...func(next http.Handler) http.Handler,
312-
) *Router {
314+
) RouterWrapper {
313315
// Create a new group
314316
newGroup, _ := NewGroup(r, pattern, middlewares...)
315317
return newGroup
@@ -351,3 +353,13 @@ func (r *Router) ServeStaticFiles(
351353
http.StripPrefix(pattern, http.FileServer(http.Dir(path))).ServeHTTP,
352354
)
353355
}
356+
357+
// Logger returns the logger
358+
func (r *Router) Logger() *Logger {
359+
return r.logger
360+
}
361+
362+
// Mode returns the mode
363+
func (r *Router) Mode() *goflagsmode.Flag {
364+
return r.mode
365+
}

0 commit comments

Comments
 (0)