Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
41f7bdf182 | |||
ed907c7076 | |||
5c2cba3ecc | |||
966bc31eb2 |
19
handler/spa/spa.go
Normal file
19
handler/spa/spa.go
Normal 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
22
http.go
@@ -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
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user