Compare commits

...

4 Commits

Author SHA1 Message Date
41f7bdf182 Merge pull request 'handler: add single page application handler' (#176) from spa-handler into master
Reviewed-on: #176
2023-08-19 23:22:00 +03:00
ed907c7076 handler: add single page application handler
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2023-08-19 23:19:54 +03:00
5c2cba3ecc Merge pull request 'micro v4 fix' (#175) from micro4 into master
Reviewed-on: #175
2023-08-16 15:27:32 +03:00
966bc31eb2 micro v4 fix
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2023-08-16 15:27:07 +03:00
2 changed files with 30 additions and 11 deletions

19
handler/spa/spa.go Normal file
View File

@@ -0,0 +1,19 @@
package spa
import (
"io/fs"
"net/http"
"strings"
)
// Handler serve files from dir and redirect to index if file not exists
var Handler = func(prefix string, dir fs.FS) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
f := http.StripPrefix(prefix, http.FileServer(http.FS(dir)))
if _, err := fs.Stat(dir, strings.TrimPrefix(r.RequestURI, prefix)); err != nil {
r.RequestURI = prefix
r.URL.Path = prefix
}
f.ServeHTTP(w, r)
}
}

22
http.go
View File

@@ -122,12 +122,22 @@ func (h *Server) Init(opts ...options.Option) error {
func (h *Server) Handle(handler interface{}, opts ...options.Option) error {
options := server.NewHandleOptions(opts...)
var endpointMetadata []EndpointMetadata
if v, ok := options.Context.Value(handlerEndpointsKey{}).([]EndpointMetadata); ok {
endpointMetadata = v
}
// passed unknown handler
hdlr, ok := handler.(*httpHandler)
if !ok {
h.Lock()
h.hd = handler
if h.handlers == nil {
h.handlers = make(map[string]interface{})
}
for _, v := range endpointMetadata {
h.handlers[v.Name] = h.newHTTPHandler(handler, opts...)
}
h.Unlock()
return nil
}
@@ -140,16 +150,6 @@ func (h *Server) Handle(handler interface{}, opts ...options.Option) error {
return nil
}
// passed micro compat handler
h.Lock()
if h.handlers == nil {
h.handlers = make(map[string]interface{})
}
for k := range options.Metadata {
h.handlers[k] = handler
}
h.Unlock()
return nil
}