mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-22 00:00:17 +02:00
Update to matchit 0.4.4 (#417)
- Static vs dynamic paths are now supported meaning `/foo` and `/:key` are not considered to overlap. - A bug we hit regarding trailing slashes is fixed.
This commit is contained in:
+1
-17
@@ -178,19 +178,6 @@ where
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
/// Note that routes like `/:key` and `/foo` are considered overlapping:
|
||||
///
|
||||
/// ```should_panic
|
||||
/// use axum::{routing::get, Router};
|
||||
///
|
||||
/// let app = Router::new()
|
||||
/// .route("/foo", get(|| async {}))
|
||||
/// .route("/:key", get(|| async {}));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
/// ```
|
||||
pub fn route<T>(mut self, path: &str, svc: T) -> Self
|
||||
where
|
||||
T: Service<Request<B>, Response = Response<BoxBody>, Error = Infallible>
|
||||
@@ -793,10 +780,7 @@ where
|
||||
match self.node.at(&path) {
|
||||
Ok(match_) => self.call_route(match_, req),
|
||||
Err(err) => {
|
||||
if err.tsr()
|
||||
// workaround for https://github.com/ibraheemdev/matchit/issues/7
|
||||
&& path != "/"
|
||||
{
|
||||
if err.tsr() {
|
||||
let redirect_to = if let Some(without_tsr) = path.strip_suffix('/') {
|
||||
with_path(req.uri(), without_tsr)
|
||||
} else {
|
||||
|
||||
@@ -640,6 +640,24 @@ async fn access_matched_path() {
|
||||
assert_eq!(res.text().await, "/:key");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn static_and_dynamic_paths() {
|
||||
let app = Router::new()
|
||||
.route(
|
||||
"/:key",
|
||||
get(|Path(key): Path<String>| async move { format!("dynamic: {}", key) }),
|
||||
)
|
||||
.route("/foo", get(|| async { "static" }));
|
||||
|
||||
let client = TestClient::new(app);
|
||||
|
||||
let res = client.get("/bar").send().await;
|
||||
assert_eq!(res.text().await, "dynamic: bar");
|
||||
|
||||
let res = client.get("/foo").send().await;
|
||||
assert_eq!(res.text().await, "static");
|
||||
}
|
||||
|
||||
pub(crate) fn assert_send<T: Send>() {}
|
||||
pub(crate) fn assert_sync<T: Sync>() {}
|
||||
pub(crate) fn assert_unpin<T: Unpin>() {}
|
||||
|
||||
Reference in New Issue
Block a user