diff --git a/packages/cli/src/server/web/proxy.rs b/packages/cli/src/server/web/proxy.rs index 4e22fc91f..dd9957bf0 100644 --- a/packages/cli/src/server/web/proxy.rs +++ b/packages/cli/src/server/web/proxy.rs @@ -65,16 +65,43 @@ pub fn add_proxy(mut router: Router, proxy: &WebProxyConfig) -> Result { let client = ProxyClient::new(url); + let method_router = any(move |mut req: Request| async move { + // Prevent request loops + if req.headers().get("x-proxied-by-dioxus").is_some() { + return Err(( + StatusCode::NOT_FOUND, + "API is sharing a loopback with the dev server. Try setting a different port on the API config." + .to_string(), + )); + } + + req.headers_mut().insert( + "x-proxied-by-dioxus", + "true".parse().expect("header value is valid"), + ); + + client + .send(req) + .await + .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string())) + }); + + // api/*path router = router.route( - // Always remove trailing /'s so that the exact route - // matches. - &format!("/*{}", trimmed_path.trim_end_matches('/')), - any(move |req: Request| async move { - client - .send(req) - .await - .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string())) - }), + &format!("/{}/*path", trimmed_path.trim_end_matches('/')), + method_router.clone(), + ); + + // /api/ + router = router.route( + &format!("/{}/", trimmed_path.trim_end_matches('/')), + method_router.clone(), + ); + + // /api + router = router.route( + &format!("/{}", trimmed_path.trim_end_matches('/')), + method_router, ); Ok(router) diff --git a/packages/hot-reload/src/lib.rs b/packages/hot-reload/src/lib.rs index 36bae8d7d..b912c6e19 100644 --- a/packages/hot-reload/src/lib.rs +++ b/packages/hot-reload/src/lib.rs @@ -71,9 +71,6 @@ pub fn connect(mut callback: impl FnMut(HotReloadMsg) + Send + 'static) { } let Ok(template) = serde_json::from_str(Box::leak(buf.into_boxed_str())) else { - eprintln!( - "Could not parse hot reloading message - make sure your client is up to date" - ); continue; }; diff --git a/packages/web/src/eval.rs b/packages/web/src/eval.rs index cb9bc0e42..66711b394 100644 --- a/packages/web/src/eval.rs +++ b/packages/web/src/eval.rs @@ -1,4 +1,3 @@ -use core::panic; use dioxus_html::prelude::{EvalError, EvalProvider, Evaluator}; use futures_util::StreamExt; use generational_box::{AnyStorage, GenerationalBox, UnsyncStorage};