router: handle urls without base properly

This commit is contained in:
Nazar Kanaev 2021-04-03 20:52:17 +01:00
parent a1b1686d3b
commit 34edfc0727
2 changed files with 23 additions and 4 deletions

View File

@ -50,10 +50,16 @@ func (r *Router) resolve(path string) *Route {
func (r *Router) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
// autoclose open base url
if r.base != "" && r.base == req.URL.Path {
if r.base != "" {
if r.base == req.URL.Path {
http.Redirect(rw, req, r.base+"/", http.StatusFound)
return
}
if !strings.HasPrefix(req.URL.Path, r.base) {
rw.WriteHeader(http.StatusNotFound)
return
}
}
path := strings.TrimPrefix(req.URL.Path, r.base)

View File

@ -118,7 +118,6 @@ func TestRouterBase(t *testing.T) {
recorder := httptest.NewRecorder()
request := httptest.NewRequest("GET", "/foo/bar", nil)
router.ServeHTTP(recorder, request)
if recorder.Result().StatusCode != 200 {
@ -130,6 +129,20 @@ func TestRouterBase(t *testing.T) {
}
}
func TestRouterBase404(t *testing.T) {
router := NewRouter("/foo")
router.For("/bar", func(c *Context) {
c.Out.Write([]byte("!!!"))
})
recorder := httptest.NewRecorder()
request := httptest.NewRequest("GET", "/bar", nil)
router.ServeHTTP(recorder, request)
if recorder.Result().StatusCode != 404 {
t.Fatal("expected 404")
}
}
func TestRouterBaseRedirect(t *testing.T) {
router := NewRouter("/foo")
router.For("/", func(c *Context) {