Crate spa_rs

source ·
Expand description

spa-rs is a library who can embed all SPA web application files (dist static file), and release as a single binary executable.

It based-on axum and rust_embed

It reexported all axum module for convenient use.

§Example

use spa_rs::spa_server_root;
use spa_rs::SpaServer;
use spa_rs::routing::{get, Router};
use anyhow::Result;

spa_server_root!("web/dist");           // specific your SPA dist file location

#[tokio::main]
async fn main() -> Result<()> {
    let data = String::new();           // server context can be acccess by [axum::Extension]
    let mut srv = SpaServer::new()?
        .port(3000)
        .data(data)
        .static_path("/png", "web")     // static file generated in runtime
        .route("/api", Router::new()
            .route("/get", get(|| async { "get works" })
        )
    );
    srv.run(spa_server_root!()).await?;  

    Ok(())
}

§Session

See session module for more detail.

§Dev

When writing SPA application, you may want use hot-reload functionallity provided by SPA framework. such as [vite dev] or [ng serve].

You can use spa-rs to reverse proxy all static requests to SPA framework. (need enable reverse-proxy feature)

§Example

  let forward_addr = "http://localhost:1234";
  srv.reverse_proxy(forward_addr.parse()?);

Modules§

  • HTTP body utilities.
  • Error handling model and utilities
  • Types and traits for extracting data from requests.
  • Conditionally dispatch requests to the inner service based on the result of a predicate.
  • Async functions that can be used to handle requests.
  • A general purpose library of common HTTP types
  • Utilities for writing middleware
  • Types and traits for generating responses.
  • Routing between [Service]s and handlers.
  • Serve services.
  • A tower middleware who can reading and writing session data from Cookie.

Macros§

Structs§

Traits§

Functions§

  • Serve the service with the supplied listener.

Type Aliases§

Attribute Macros§