Routing â
Mocket's routing system maps incoming HTTP requests to handler functions. It provides an Express.js-like API with optimized performance for both static and dynamic routes.
Basic Routing â
HTTP Methods â
Register routes using HTTP method functions:
let app = @mocket.new()
app.get("/", _event => "GET request")
app.post("/users", _event => ({ "message": "User created" } : Json))
app.put("/users/:id", _event => "User updated")
app.delete("/users/:id", _event => "User deleted")Common methods: get, post, put, patch, delete, head, options, trace, and connect.
Extended HTTP/WebDAV method helpers are also available: acl, bind, checkin, checkout, copy, label, link, lock, merge, mkactivity, mkcalendar, mkcol, mkredirectref, mkworkspace, move_, orderpatch, pri, propfind, proppatch, query, rebind, report, search, unbind, uncheckout, unlink, unlock, update, updateredirectref, and version_control.
Use on(method, path, handler) when you need to register a method by string.
Catch-All Routes â
Use all() to handle any HTTP method:
app.all("/api/**", _event => "API endpoint")Route Patterns â
Static Routes â
Static routes match exact paths:
app.get("/about", handler)
app.get("/contact", handler)
app.get("/api/status", handler)Dynamic Routes â
Dynamic routes use parameters and wildcards:
Path Parameters â
Use :parameter to capture path segments:
app.get("/users/:id", event => {
let user_id = event.params.get("id").unwrap_or("unknown").to_owned()
"User ID: " + user_id
})
app.get("/users/:id/posts/:post_id", event => {
let user_id = event.params.get("id").unwrap_or("unknown").to_owned()
let post_id = event.params.get("post_id").unwrap_or("unknown").to_owned()
({ "user_id": user_id, "post_id": post_id } : Json)
})Wildcards â
Use * to match one path segment:
app.get("/files/*", event => {
let file_path = event.params.get("_").unwrap_or("").to_owned()
"File path: " + file_path
})Use ** to match the rest of a path:
app.get("/static/**", event => {
let file_path = event.params.get("_").unwrap_or("").to_owned()
"File path: " + file_path
})Route Matching â
Matching Priority â
Static routes are checked before dynamic routes for the same HTTP method. Dynamic routes are checked in the order they were registered:
app.get("/users/admin", _event => "Admin user") // This will match first
app.get("/users/:id", _event => "Regular user") // This won't match for /users/adminRoute Groups â
Group related routes with common prefixes:
let app = @mocket.new()
app.group("/api/v1", api => {
api.get("/users", _ => "List users")
api.post("/users", _ => "Create user")
api.get("/users/:id", event => {
let id = event.params.get("id").unwrap_or("unknown").to_owned()
"User " + id
})
})Advanced Patterns â
Multiple Parameters â
app.get("/api/:version/users/:id/posts/:post_id", event => {
let version = event.params.get("version").unwrap_or("v1").to_owned()
let id = event.params.get("id").unwrap_or("unknown").to_owned()
let post_id = event.params.get("post_id").unwrap_or("unknown").to_owned()
({ "version": version, "id": id, "post_id": post_id } : Json)
})