13 个版本

0.1.12 2021年6月13日
0.1.11 2021年6月1日
0.1.10 2021年5月31日
0.1.5 2021年4月26日
0.1.1 2020年10月12日

#6 in #conn

每月 37 次下载

MIT 许可证

29KB
560

Confetti 🎉

与 CloudFlare Workers 玩得开心

🐑 使用 wrangler generate 克隆此模板

在这里了解更多关于 wrangler generate 的信息。

wrangler generate wasm-worker https://github.com/pinatasoftware/confetti-template.git
cd wasm-worker

🎉 Confeti 帮助处理请求

路由

每个路由都有一个模式和一个中间件列表

Route {
    pattern: (Method::Get, "/"),
    middlewares: vec![fetch_session, validate_user, home],
},

中间件一个接一个地运行。如果任何一个中间件停止,则立即发送响应,所有剩余的中间件将不会运行

中间件

中间件是接收并返回 Conn 的异步函数

pub async fn hello(conn: Conn) -> Conn {
    let mut headers = conn.resp_headers;
    headers.insert("Content-Type".to_string(), "text/html".to_string());
    let content = "<h1>Hello World from Confetti</h1>";
    return Conn {
        resp_headers: headers,
        resp_body: content.to_string(),
        status: 200,
        ..conn
    };
}

Conn 结构体

pub struct Conn {
    // Request
    pub host: String,
    pub method: Method,
    pub port: u16,
    pub scheme: String,
    pub path: String,
    pub query_string: String,
    pub req_body: String,
    pub req_headers: HashMap<String, String>,
    pub cf: HashMap<String, String>,
    // Response
    pub resp_body: String,
    pub resp_headers: HashMap<String, String>,
    pub status: u16,
    // Connection
    pub assigns: HashMap<String, String>,
    pub halted: bool,
}

🛠️ 使用 wasm-pack build 构建

wasm-pack build

🔬 使用 wasm-pack test 在无头浏览器中测试

wasm-pack test --headless --firefox

依赖

~10–14MB
~262K SLoC