Fix echo's URI routing race condition that caused random 404s.
This commit is contained in:
parent
684c64ced1
commit
1e8b533d45
|
@ -267,9 +267,9 @@ func handleCreateCampaign(c echo.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hand over to the GET handler to return the last insertion.
|
// Hand over to the GET handler to return the last insertion.
|
||||||
c.SetParamNames("id")
|
return handleGetCampaigns(copyEchoCtx(c, map[string]string{
|
||||||
c.SetParamValues(fmt.Sprintf("%d", newID))
|
"id": fmt.Sprintf("%d", newID),
|
||||||
return handleGetCampaigns(c)
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// handleUpdateCampaign handles campaign modification.
|
// handleUpdateCampaign handles campaign modification.
|
||||||
|
|
|
@ -238,3 +238,23 @@ func getPagination(q url.Values, perPage, maxPerPage int) pagination {
|
||||||
Limit: perPage,
|
Limit: perPage,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// copyEchoCtx returns a copy of the the current echo.Context in a request
|
||||||
|
// with the given params set for the active handler to proxy the request
|
||||||
|
// to another handler without mutating its context.
|
||||||
|
func copyEchoCtx(c echo.Context, params map[string]string) echo.Context {
|
||||||
|
var (
|
||||||
|
keys = make([]string, 0, len(params))
|
||||||
|
vals = make([]string, 0, len(params))
|
||||||
|
)
|
||||||
|
for k, v := range params {
|
||||||
|
keys = append(keys, k)
|
||||||
|
vals = append(vals, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
b := c.Echo().NewContext(c.Request(), c.Response())
|
||||||
|
b.Set("app", c.Get("app").(*App))
|
||||||
|
b.SetParamNames(keys...)
|
||||||
|
b.SetParamValues(vals...)
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
|
@ -118,9 +118,9 @@ func handleCreateList(c echo.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hand over to the GET handler to return the last insertion.
|
// Hand over to the GET handler to return the last insertion.
|
||||||
c.SetParamNames("id")
|
return handleGetLists(copyEchoCtx(c, map[string]string{
|
||||||
c.SetParamValues(fmt.Sprintf("%d", newID))
|
"id": fmt.Sprintf("%d", newID),
|
||||||
return handleGetLists(c)
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// handleUpdateList handles list modification.
|
// handleUpdateList handles list modification.
|
||||||
|
|
|
@ -147,9 +147,9 @@ func handleCreateTemplate(c echo.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hand over to the GET handler to return the last insertion.
|
// Hand over to the GET handler to return the last insertion.
|
||||||
c.SetParamNames("id")
|
return handleGetTemplates(copyEchoCtx(c, map[string]string{
|
||||||
c.SetParamValues(fmt.Sprintf("%d", newID))
|
"id": fmt.Sprintf("%d", newID),
|
||||||
return handleGetTemplates(c)
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// handleUpdateTemplate handles template modification.
|
// handleUpdateTemplate handles template modification.
|
||||||
|
|
Loading…
Reference in New Issue