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服务器
每月103次下载
用于 preroll
23KB
197 行
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 PoolOptions
和ConnectOptions
#[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(())
}
为什么你可能想使用这个
数据库事务非常有用,因为它们允许在出现问题时轻松、安全地回滚。然而,事务会带来额外的运行时成本,这对于不需要此行为的读取操作来说太过昂贵。
为了使事务能够无缝地在端点中使用,此中间件会管理一个事务(如果被认为是有必要的)。
许可证
依赖关系
~14–31MB
~468K SLoC