Routing API Reference

Complete reference for MoroJS routing methods, patterns, and configuration options.

Route Methods

HTTP Methods

app.get(path, config)GET requests
app.post(path, config)POST requests
app.put(path, config)PUT requests
app.delete(path, config)DELETE requests
app.patch(path, config)PATCH requests

Additional Methods

app.route(config)Schema-first routing
app.use(middleware)Global middleware
app.websocket(path, config)WebSocket routes
app.listen(port)Start server

Route Patterns

Pattern Examples

typescript

1// Static routes
2app.get('/users', handler);
3app.get('/api/health', handler);
4
5// Named parameters
6app.get('/users/:id', handler);
7app.get('/users/:userId/posts/:postId', handler);
8
9// Optional parameters
10app.get('/posts/:id?', handler);
11
12// Wildcard routes
13app.get('/files/*', handler);
14app.get('/api/v1/*', handler);
15
16// Regex patterns
17app.get('/users/:id(\d+)', handler); // Only digits
18app.get('/files/:name(.+\.(jpg|png|gif))', handler); // File extensions
19
20// Query parameters (automatic)
21app.get('/search', ({ query }) => {
22  // query.q, query.limit, etc. automatically available
23});

Pattern Matching Rules

  • Static routes have highest priority
  • Named parameters are case-sensitive
  • Wildcards match remaining path segments
  • Routes are matched in registration order

Route Groups

Basic Route Groups

typescript

1// Group routes with common prefix
2app.group('/api/v1', (group) => {
3  group.get('/users', getUsersHandler);        // GET /api/v1/users
4  group.post('/users', createUserHandler);     // POST /api/v1/users
5  group.get('/users/:id', getUserHandler);     // GET /api/v1/users/:id
6});
7
8// Nested groups
9app.group('/api', (api) => {
10  api.group('/v1', (v1) => {
11    v1.get('/users', handler);                 // GET /api/v1/users
12  });
13  
14  api.group('/v2', (v2) => {
15    v2.get('/users', handler);                 // GET /api/v2/users
16  });
17});

Groups with Middleware

typescript

1// Apply middleware to entire group
2app.group('/admin', {
3  middleware: [authMiddleware, adminMiddleware],
4  routes: (group) => {
5    group.get('/users', getAdminUsers);
6    group.post('/users', createAdminUser);
7    group.delete('/users/:id', deleteUser);
8  }
9});
10
11// Groups with configuration
12app.group('/api/v1', {
13  middleware: [corsMiddleware],
14  rateLimit: { max: 1000, window: '1h' },
15  routes: (group) => {
16    group.get('/public', publicHandler);
17    group.get('/private', privateHandler);
18  }
19});

Next Steps