Skip to content

Commit 00e9fd0

Browse files
authored
Merge pull request #5804 from Turbo87/axum-404
Handle 404 errors in `axum`
2 parents be4668b + fca89b3 commit 00e9fd0

File tree

5 files changed

+7
-72
lines changed

5 files changed

+7
-72
lines changed

src/lib.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ use std::sync::Arc;
3131

3232
use crate::app::AppState;
3333
use crate::router::build_axum_router;
34-
use conduit_axum::ConduitFallback;
3534
use tikv_jemallocator::Jemalloc;
3635

3736
#[global_allocator]
@@ -84,11 +83,8 @@ pub enum Env {
8483
pub fn build_handler(app: Arc<App>) -> axum::Router {
8584
let state = AppState(app);
8685

87-
let endpoints = router::build_router();
88-
let conduit_handler = middleware::build_middleware(state.clone(), endpoints);
89-
9086
let axum_router = build_axum_router(state.clone());
91-
middleware::apply_axum_middleware(state, axum_router.conduit_fallback(conduit_handler))
87+
middleware::apply_axum_middleware(state, axum_router)
9288
}
9389

9490
/// Convenience function requiring that an environment variable is set.

src/middleware.rs

-16
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,12 @@ mod prelude {
55
pub use http::{header, Response, StatusCode};
66
}
77

8-
use self::app::AppMiddleware;
9-
use self::known_error_to_json::KnownErrorToJson;
10-
118
pub mod app;
129
mod balance_capacity;
1310
mod block_traffic;
1411
mod debug;
1512
mod ember_html;
1613
mod head;
17-
mod known_error_to_json;
1814
pub mod log_request;
1915
pub mod normalize_path;
2016
mod require_user_agent;
@@ -23,9 +19,6 @@ pub mod session;
2319
mod static_or_continue;
2420
mod update_metrics;
2521

26-
use conduit_middleware::MiddlewareBuilder;
27-
use conduit_router::RouteBuilder;
28-
2922
use ::sentry::integrations::tower as sentry_tower;
3023
use axum::error_handling::HandleErrorLayer;
3124
use axum::middleware::{from_fn, from_fn_with_state};
@@ -107,12 +100,3 @@ pub fn apply_axum_middleware(state: AppState, router: Router) -> Router {
107100
async fn dummy_error_handler(_err: axum::BoxError) -> http::StatusCode {
108101
http::StatusCode::INTERNAL_SERVER_ERROR
109102
}
110-
111-
pub fn build_middleware(app: AppState, endpoints: RouteBuilder) -> MiddlewareBuilder {
112-
let mut m = MiddlewareBuilder::new(endpoints);
113-
114-
m.add(AppMiddleware::new(app));
115-
m.add(KnownErrorToJson);
116-
117-
m
118-
}

src/middleware/app.rs

-18
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,6 @@ use http::Request;
66

77
use crate::app::AppState;
88

9-
/// Middleware that injects the `App` instance into the `Request` extensions
10-
pub struct AppMiddleware {
11-
app: AppState,
12-
}
13-
14-
impl AppMiddleware {
15-
pub fn new(app: AppState) -> AppMiddleware {
16-
AppMiddleware { app }
17-
}
18-
}
19-
20-
impl Middleware for AppMiddleware {
21-
fn before(&self, req: &mut dyn RequestExt) -> BeforeResult {
22-
req.mut_extensions().insert(self.app.clone());
23-
Ok(())
24-
}
25-
}
26-
279
/// `axum` middleware that injects the `AppState` instance into the `Request` extensions.
2810
pub async fn add_app_state_extension<B>(
2911
State(app_state): State<AppState>,

src/middleware/known_error_to_json.rs

-26
This file was deleted.

src/router.rs

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
use axum::handler::Handler as AxumHandler;
22
use axum::middleware::from_fn_with_state;
3+
use axum::response::IntoResponse;
34
use axum::routing::{delete, get, post, put};
45
use axum::Router;
56
use conduit::{Handler, HandlerResult, RequestExt};
67
use conduit_axum::{CauseField, ConduitAxumHandler};
7-
use conduit_router::{RouteBuilder, RoutePattern};
8+
use conduit_router::RoutePattern;
89

910
use crate::app::AppState;
1011
use crate::controllers::*;
1112
use crate::middleware::app::{add_app_state_extension, RequestApp};
12-
use crate::util::errors::{AppError, RouteBlocked};
13+
use crate::util::errors::{not_found, AppError, RouteBlocked};
1314
use crate::util::EndpointResult;
1415
use crate::Env;
1516

@@ -197,11 +198,9 @@ pub fn build_axum_router(state: AppState) -> Router {
197198
);
198199
}
199200

200-
router.with_state(state)
201-
}
202-
203-
pub fn build_router() -> RouteBuilder {
204-
RouteBuilder::new()
201+
router
202+
.fallback(|| async { not_found().into_response() })
203+
.with_state(state)
205204
}
206205

207206
struct C(pub fn(&mut dyn RequestExt) -> EndpointResult);

0 commit comments

Comments
 (0)