Trailing slash in nested routes is handled incorrectly
Closed this issue · 2 comments
ukstv commented
Nested REST-style router does not handle urls without slash:
class Main extends RequestRouter {
any("/page/*") = new PageRouter
get("/page") = "in main"
}
class PageRouter extends RequestRouter("/page") {
get("/") = "in page"
}
Result of /page
request is "in main", not "in page", while /page/
returns "in page" as it should. Url without trailing slash should be handled by nested router, shouldn't it?
inca commented
The best option is to forward requests to force trailing slashes:
class Main extends RequestRouter {
any("/page") = forward("/page/")
any("/page/*") = new PageRouter
}
class PageRouter extends RequestRouter("/page") {
get("/") = "in page"
}
But you might as well find this useful too:
class Main extends RequestRouter {
any("/page*") = new PageRouter
get("/page") = "in main" // won't match
}
class PageRouter extends RequestRouter("/page") {
get("/?") = "in page"
}
We do not provide special treatment to slashes inside prefix, and we do it on purpose. This way you always get the full pattern for each of your route by simply appending it to router's prefix. This is way easier to understand when debugging complex routes, I think.
ukstv commented
Thank you for clarifications!