2 Commits
v0.1.1 ... main

2 changed files with 41 additions and 0 deletions

View File

@@ -1,7 +1,11 @@
package tower package tower
import ( import (
"io/fs"
"net/http" "net/http"
"path"
"github.com/julienschmidt/httprouter"
) )
type Group struct { type Group struct {
@@ -40,6 +44,27 @@ func (g *Group) Static(prefix, dir string) {
g.parent.router.ServeFiles(buildFullPath(g.prefix, prefix), http.Dir(dir)) g.parent.router.ServeFiles(buildFullPath(g.prefix, prefix), http.Dir(dir))
} }
func (g *Group) StaticFS(prefix string, fsys fs.FS) {
fileServer := http.FileServer(http.FS(fsys))
handler := func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
fp := p.ByName("filepath")
if fp == "" {
fp = "/"
}
fp = path.Clean("/" + fp)
req := r.Clone(r.Context())
req.URL.Path = fp
fileServer.ServeHTTP(w, req)
}
g.parent.router.Handle(http.MethodGet, buildFullPath(g.prefix, buildFullPath(prefix, "/*filepath")), handler)
g.parent.router.Handle(http.MethodHead, buildFullPath(g.prefix, buildFullPath(prefix, "/*filepath")), handler)
}
func (g *Group) GET(path string, h Handler, routeMiddlewares ...Middleware) { func (g *Group) GET(path string, h Handler, routeMiddlewares ...Middleware) {
g.Handle(http.MethodGet, path, h, routeMiddlewares...) g.Handle(http.MethodGet, path, h, routeMiddlewares...)
} }

View File

@@ -49,6 +49,22 @@ func (t *Tower) SetErrorHandler(errorHandler ErrorHandler) {
t.errorHandler = errorHandler t.errorHandler = errorHandler
} }
func (t *Tower) SetNotFoundHandler(notFoundHandler Handler) {
t.router.NotFound = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := Context{
request: r,
response: &responseWriter{ResponseWriter: w},
params: httprouter.Params{},
}
if err := notFoundHandler(&ctx); err != nil {
if err := t.errorHandler(&ctx, err); err != nil {
log.Printf("[Error] %v", err)
}
}
})
}
func (t *Tower) Use(globalMiddlewares ...Middleware) { func (t *Tower) Use(globalMiddlewares ...Middleware) {
t.globalMiddlewares = append(t.globalMiddlewares, globalMiddlewares...) t.globalMiddlewares = append(t.globalMiddlewares, globalMiddlewares...)
} }