1Apply a [`tower::Layer`] to all routes in the router. 2 3This can be used to add additional processing to a request for a group 4of routes. 5 6Note that the middleware is only applied to existing routes. So you have to 7first add your routes (and / or fallback) and then call `layer` afterwards. Additional 8routes added after `layer` is called will not have the middleware added. 9 10If you want to add middleware to a single handler you can either use 11[`MethodRouter::layer`] or [`Handler::layer`]. 12 13# Example 14 15Adding the [`tower_http::trace::TraceLayer`]: 16 17```rust 18use axum::{routing::get, Router}; 19use tower_http::trace::TraceLayer; 20 21let app = Router::new() 22 .route("/foo", get(|| async {})) 23 .route("/bar", get(|| async {})) 24 .layer(TraceLayer::new_for_http()); 25# let _: Router = app; 26``` 27 28If you need to write your own middleware see ["Writing 29middleware"](crate::middleware#writing-middleware) for the different options. 30 31If you only want middleware on some routes you can use [`Router::merge`]: 32 33```rust 34use axum::{routing::get, Router}; 35use tower_http::{trace::TraceLayer, compression::CompressionLayer}; 36 37let with_tracing = Router::new() 38 .route("/foo", get(|| async {})) 39 .layer(TraceLayer::new_for_http()); 40 41let with_compression = Router::new() 42 .route("/bar", get(|| async {})) 43 .layer(CompressionLayer::new()); 44 45// Merge everything into one `Router` 46let app = Router::new() 47 .merge(with_tracing) 48 .merge(with_compression); 49# let _: Router = app; 50``` 51 52# Multiple middleware 53 54It's recommended to use [`tower::ServiceBuilder`] when applying multiple 55middleware. See [`middleware`](crate::middleware) for more details. 56 57# Runs after routing 58 59Middleware added with this method will run _after_ routing and thus cannot be 60used to rewrite the request URI. See ["Rewriting request URI in 61middleware"](crate::middleware#rewriting-request-uri-in-middleware) for more 62details and a workaround. 63 64# Error handling 65 66See [`middleware`](crate::middleware) for details on how error handling impacts 67middleware. 68