Skip to main content

middleware/
middleware.rs

1use expressjs::prelude::*;
2use hyper::header::HeaderValue;
3
4#[tokio::main]
5async fn main() {
6    let mut app = express();
7
8    // Global middleware: Cors
9    app.use_global(CorsMiddleware::permissive());
10
11    // Global middleware: Normalize path
12    app.use_global(NormalizePathMiddleware::new());
13
14    // Route-specific middleware (using prefix)
15    app.use_with("/api", |req: &mut Request, _res: &mut Response| {
16        let path = req.uri().path().to_owned();
17        async move {
18            println!("API middleware triggered for: {}", path);
19            next_res()
20        }
21    });
22
23    app.get("/api/v1", async |_req, res| res.send_text("API Response"));
24
25    // Header manipulation in middleware (global logging)
26    app.use_global(LoggingMiddleware);
27
28    // Dynamic middleware logic
29    app.use_global(|req: &mut Request, res: &mut Response| {
30        let uri = req.uri().to_string();
31        res.header("X-Custom-Global", HeaderValue::from_static("Enabled"));
32        async move {
33            println!("Custom global middleware for: {}", uri);
34            next_res()
35        }
36    });
37
38    app.get("/hello", async |_req, res| res.send_text("Hello!"));
39
40    app.listen(9000, async |port| {
41        println!("🚀 Server running on http://localhost:{port}/");
42    })
43    .await;
44}