Added middleware support
This commit is contained in:
35
Server.go
35
Server.go
@ -15,8 +15,9 @@ import (
|
||||
|
||||
// Server represents a single web service.
|
||||
type Server struct {
|
||||
Router *router.Router[Handler]
|
||||
Config Configuration
|
||||
Router *router.Router[Handler]
|
||||
Config Configuration
|
||||
handlers []Handler
|
||||
}
|
||||
|
||||
// New creates a new server.
|
||||
@ -24,6 +25,17 @@ func New() *Server {
|
||||
return &Server{
|
||||
Router: router.New[Handler](),
|
||||
Config: defaultConfig(),
|
||||
handlers: []Handler{
|
||||
func(c Context) error {
|
||||
handler := c.(*ctx).server.Router.LookupNoAlloc(c.Method(), c.Path(), c.(*ctx).addParameter)
|
||||
|
||||
if handler == nil {
|
||||
return c.Status(http.StatusNotFound).String(http.StatusText(http.StatusNotFound))
|
||||
}
|
||||
|
||||
return handler(c)
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@ -49,18 +61,10 @@ func (server *Server) Put(path string, handler Handler) {
|
||||
|
||||
// ServeHTTP responds to the given request.
|
||||
func (server *Server) ServeHTTP(response http.ResponseWriter, request *http.Request) {
|
||||
ctx := newContext(request, response)
|
||||
ctx := newContext(request, response, server)
|
||||
defer contextPool.Put(ctx)
|
||||
|
||||
handler := server.Router.LookupNoAlloc(request.Method, request.URL.Path, ctx.addParameter)
|
||||
|
||||
if handler == nil {
|
||||
response.WriteHeader(http.StatusNotFound)
|
||||
response.(io.StringWriter).WriteString(http.StatusText(http.StatusNotFound))
|
||||
return
|
||||
}
|
||||
|
||||
err := handler(ctx)
|
||||
err := server.handlers[0](ctx)
|
||||
|
||||
if err != nil {
|
||||
response.(io.StringWriter).WriteString(err.Error())
|
||||
@ -96,3 +100,10 @@ func (server *Server) Run(address string) error {
|
||||
|
||||
return srv.Shutdown(ctx)
|
||||
}
|
||||
|
||||
// Use adds handlers to your handlers chain.
|
||||
func (server *Server) Use(handlers ...Handler) {
|
||||
last := server.handlers[len(server.handlers)-1]
|
||||
server.handlers = append(server.handlers[:len(server.handlers)-1], handlers...)
|
||||
server.handlers = append(server.handlers, last)
|
||||
}
|
||||
|
Reference in New Issue
Block a user