14个版本 (5个破坏性更新)

0.6.1 2021年4月19日
0.6.0 2021年3月22日
0.5.0 2021年2月23日
0.4.1 2021年2月22日
0.1.0 2020年11月18日

#1372 in HTTP服务器

Download history 22/week @ 2024-03-14 15/week @ 2024-03-21 26/week @ 2024-03-28 22/week @ 2024-04-04 21/week @ 2024-04-11 74/week @ 2024-04-18 68/week @ 2024-04-25 19/week @ 2024-05-02 15/week @ 2024-05-09 56/week @ 2024-05-16 85/week @ 2024-05-23 68/week @ 2024-05-30 42/week @ 2024-06-06 42/week @ 2024-06-13 11/week @ 2024-06-20 3/week @ 2024-06-27

每月103次下载
用于 preroll

BlueOak-1.0.0

23KB
197

tide-sqlx

Tide中间件,用于SQLx连接池和事务。


这是一个Tide中间件,它维护一个SQLx数据库连接池,并为每个tide::Request自动提供一个连接,该连接可以是数据库事务,也可以是直接的连接池数据库连接。

默认情况下,除了GET和HEAD之外的所有HTTP方法都使用事务。

使用此功能时,请使用SQLxRequestExt扩展特质来获取连接。

示例

基础

#[async_std::main]
async fn main() -> anyhow::Result<()> {
    use sqlx::Acquire; // Or sqlx::prelude::*;
    use sqlx::postgres::Postgres;

    use tide_sqlx::SQLxMiddleware;
    use tide_sqlx::SQLxRequestExt;

    let mut app = tide::new();
    app.with(SQLxMiddleware::<Postgres>::new("postgres://127.0.0.1/a_database").await?);

    app.at("/").post(|req: tide::Request<()>| async move {
        let mut pg_conn = req.sqlx_conn::<Postgres>().await;

        sqlx::query("SELECT * FROM users")
            .fetch_optional(pg_conn.acquire().await?)
            .await;

        Ok("")
    });
    Ok(())
}

从sqlx PoolOptionsConnectOptions

#[async_std::main]
async fn main() -> anyhow::Result<()> {
    use log::LevelFilter;
    use sqlx::{Acquire, ConnectOptions}; // Or sqlx::prelude::*;
    use sqlx::postgres::{PgConnectOptions, PgPoolOptions, Postgres};

    use tide_sqlx::SQLxMiddleware;
    use tide_sqlx::SQLxRequestExt;

    let mut connect_opts = PgConnectOptions::new();
    connect_opts.log_statements(LevelFilter::Debug);

    let pg_pool = PgPoolOptions::new()
        .max_connections(5)
        .connect_with(connect_opts)
        .await?;

    let mut app = tide::new();
    app.with(SQLxMiddleware::from(pg_pool));

    app.at("/").post(|req: tide::Request<()>| async move {
        let mut pg_conn = req.sqlx_conn::<Postgres>().await;

        sqlx::query("SELECT * FROM users")
            .fetch_optional(pg_conn.acquire().await?)
            .await;

        Ok("")
    });
    Ok(())
}

为什么你可能想使用这个

数据库事务非常有用,因为它们允许在出现问题时轻松、安全地回滚。然而,事务会带来额外的运行时成本,这对于不需要此行为的读取操作来说太过昂贵。

为了使事务能够无缝地在端点中使用,此中间件会管理一个事务(如果被认为是有必要的)。

许可证

BlueOak模型许可证1.0.0下授权 — 通过DCO 1.1进行贡献

依赖关系

~14–31MB
~468K SLoC