@@ -361,19 +361,25 @@ pub async fn route_request<'a>(
361
361
let res = if let Some ( route) = routes. iter ( ) . find ( |route| * * route == RawRoute :: new ( path) ) {
362
362
let params = route. extract_params ( path) ;
363
363
let controller = route. controller . clone ( ) ;
364
- match method {
365
- "GET" => controller. get ( req, params) ,
366
- "HEAD" => controller. head ( req, params) ,
367
- "POST" => controller. post ( req, params) ,
368
- "PUT" => controller. put ( req, params) ,
369
- "DELETE" => controller. delete ( req, params) ,
370
- "CONNECT" => controller. connect ( req, params) ,
371
- "OPTIONS" => controller. options ( req, params) ,
372
- "TRACE" => controller. trace ( req, params) ,
373
- "PATCH" => controller. patch ( req, params) ,
374
- _ => controller. bad_request ( anyhow:: Error :: msg ( "unsupported HTTP method" ) ) ,
364
+ let res = match method {
365
+ "GET" => controller. clone ( ) . get ( req, params) ,
366
+ "HEAD" => controller. clone ( ) . head ( req, params) ,
367
+ "POST" => controller. clone ( ) . post ( req, params) ,
368
+ "PUT" => controller. clone ( ) . put ( req, params) ,
369
+ "DELETE" => controller. clone ( ) . delete ( req, params) ,
370
+ "CONNECT" => controller. clone ( ) . connect ( req, params) ,
371
+ "OPTIONS" => controller. clone ( ) . options ( req, params) ,
372
+ "TRACE" => controller. clone ( ) . trace ( req, params) ,
373
+ "PATCH" => controller. clone ( ) . patch ( req, params) ,
374
+ _ => controller. clone ( ) . bad_request ( anyhow:: Error :: msg ( "unsupported HTTP method" ) ) ,
375
+ }
376
+ . await ;
377
+
378
+ if let Err ( e) = res {
379
+ Ok ( controller. clone ( ) . internal_server_error ( e) . await ?)
380
+ } else {
381
+ res
375
382
}
376
- . await
377
383
} else {
378
384
not_found ( ) . await
379
385
} ;
0 commit comments