Routing
Basic Routes
nv
app.get("/", handler);
app.post("/users", handler);
app.put("/users/:id", handler);
app.delete("/users/:id", handler);
app.patch("/users/:id", handler);
app.options("/users", handler);
app.head("/users", handler);Path Parameters
Capture dynamic segments:
nv
app.get("/users/:id", func_handler(|ctx| {
let id = ctx.param("id");
// ...
}));
app.get("/posts/:post_id/comments/:comment_id", func_handler(|ctx| {
let post_id = ctx.param("post_id");
let comment_id = ctx.param("comment_id");
// ...
}));Wildcards
Match any path suffix with *:
nv
app.get("/static/*filepath", func_handler(|ctx| {
let path = ctx.param("filepath");
// /static/css/main.css → path = "css/main.css"
}));Route Groups
Organize routes with common prefixes:
nv
let api = app.group("/api");
api.get("/users", get_users); // GET /api/users
api.post("/users", create_user); // POST /api/users
let v1 = api.group("/v1");
v1.get("/status", get_status); // GET /api/v1/statusGroup Middleware
Apply middleware to a group:
nv
let admin = app.group("/admin");
admin.add_middleware(auth_middleware);
admin.get("/dashboard", dashboard); // Protected
admin.get("/settings", settings); // ProtectedAny Method
Match all HTTP methods:
nv
app.any("/ping", func_handler(|ctx| {
ctx.string("pong");
}));