@@ -8,6 +8,7 @@ mod routes;
88mod s3;
99
1010use axum:: {
11+ ServiceExt ,
1112 body:: Body ,
1213 extract:: { Path , Request } ,
1314 http:: { HeaderMap , StatusCode } ,
@@ -21,8 +22,12 @@ use routes::{ApiError, GetState};
2122use sentry_tower:: SentryHttpLayer ;
2223use sha1:: Digest ;
2324use std:: { net:: IpAddr , sync:: Arc , time:: Instant } ;
25+ use tower:: Layer ;
2426use tower_cookies:: CookieManagerLayer ;
25- use tower_http:: { catch_panic:: CatchPanicLayer , cors:: CorsLayer , trace:: TraceLayer } ;
27+ use tower_http:: {
28+ catch_panic:: CatchPanicLayer , cors:: CorsLayer , normalize_path:: NormalizePathLayer ,
29+ trace:: TraceLayer ,
30+ } ;
2631use utoipa:: openapi:: security:: { ApiKey , ApiKeyValue , SecurityScheme } ;
2732use utoipa_axum:: router:: OpenApiRouter ;
2833
@@ -192,7 +197,7 @@ async fn main() {
192197
193198 let app =
194199 OpenApiRouter :: new ( )
195- . nest ( "/api" , routes:: router ( & state) )
200+ . merge ( routes:: router ( & state) )
196201 . route (
197202 "/" ,
198203 get ( || async move {
@@ -203,7 +208,7 @@ async fn main() {
203208 (
204209 StatusCode :: OK ,
205210 headers,
206- include_str ! ( "../static/index .html" ) ,
211+ include_str ! ( "../static/api .html" ) ,
207212 )
208213 } ) ,
209214 )
@@ -347,7 +352,12 @@ async fn main() {
347352
348353 let router = router. route ( "/openapi.json" , get ( || async move { axum:: Json ( openapi) } ) ) ;
349354
350- axum:: serve ( listener, router. into_make_service ( ) )
351- . await
352- . unwrap ( ) ;
355+ axum:: serve (
356+ listener,
357+ ServiceExt :: < Request > :: into_make_service (
358+ NormalizePathLayer :: trim_trailing_slash ( ) . layer ( router) ,
359+ ) ,
360+ )
361+ . await
362+ . unwrap ( ) ;
353363}
0 commit comments