chore: init bj_power monorepo (dashboard/mes/wms/wms_client/workstation), clear subproject git metadata and align naming to folder names
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package xhttp
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const basename = "/"
|
||||
|
||||
type NotFoundHandler struct {
|
||||
fs http.FileSystem
|
||||
fileServer http.Handler
|
||||
}
|
||||
|
||||
func NewNotFoundHandler(fs http.FileSystem) NotFoundHandler {
|
||||
return NotFoundHandler{
|
||||
fs: fs,
|
||||
fileServer: http.FileServer(fs),
|
||||
}
|
||||
}
|
||||
|
||||
func (n NotFoundHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
if strings.HasPrefix(r.URL.Path, "/api/") {
|
||||
http.Error(w, "not found", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
filePath := strings.TrimPrefix(path.Clean(r.URL.Path), basename)
|
||||
if len(filePath) == 0 {
|
||||
filePath = basename
|
||||
}
|
||||
|
||||
file, err := n.fs.Open(filePath)
|
||||
switch {
|
||||
case err == nil:
|
||||
n.fileServer.ServeHTTP(w, r)
|
||||
_ = file.Close()
|
||||
return
|
||||
case os.IsNotExist(err):
|
||||
r.URL.Path = "/" // all virtual routes in react app means visit index.html
|
||||
n.fileServer.ServeHTTP(w, r)
|
||||
return
|
||||
default:
|
||||
http.Error(w, "not found", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user