7个版本 (4个重大变更)
0.5.1 | 2023年9月12日 |
---|---|
0.5.0 | 2022年11月6日 |
0.4.0 | 2021年11月12日 |
0.3.1 | 2021年7月12日 |
0.1.0 | 2019年7月27日 |
482 在 HTTP服务器
每月130 次下载
在 gotham_restful 中使用
570KB
10K SLoC
Gotham Diesel中间件
gotham diesel中间件提供了与Gotham交互的便捷API。
用法
此中间件引入了一个Repo结构体,该结构体用作Diesel和Gotham之间的层,以确保数据库交互可以轻松地与其他异步操作一起链式调用。这个结构体相当简单,提供了从Gotham内部与Diesel交互的简单方法
// create a new repo, in this case just using a SQLite setup
let repo: Repo<SqliteConnection> = Repo::new("products.db");
// create a middleware pipeline from our middleware
let pipeline = single_middleware(DieselMiddleware::new(repo));
// construct a basic chain from our pipeline
let (chain, pipelines) = single_pipeline(pipeline);
// build a router with the chain & pipeline
gotham::start("127.0.0.1:7878", build_router(chain, pipelines, |route| {
route.get("/").to(say_hello);
}))
从那里,您可以在请求状态下简单访问Repo,就像使用其他中间件一样。然后,您可以使用Repo来执行数据库调用
// borrow the repo from the state
let repo = Repo::borrow_from(&state);
// execute database calls
repo.run(move |conn| {
diesel::insert_into(products::table)
.values(&product)
.execute(&conn)
})
repo.run
返回一个Future,允许您在其他异步处理程序代码中无缝地添加数据库调用。Repo
类型使用 tokio::task::spawn_blocking
管理底层连接的同步调用,这允许阻塞操作在不阻塞tokio反应器的情况下运行。虽然这不是真正的异步操作,但它允许处理多个并发数据库请求,默认为100个并发阻塞操作。有关详细信息,请参阅 tokio::task::spawn_blocking 文档。
有关完整示例,请参阅 主仓库中的示例。
配置
要自定义连接池的各个方面,您可以从一个 r2d2::Builder
构造一个repo,设置其中的任何属性
let repo = Repo::from_pool_builder(database_url,
Pool::builder()
.connection_timeout(Duration::from_secs(120))
.max_size(100)
隔离的测试事务
在测试中使用时,中间件可以使用隔离的测试事务,允许测试并行运行。在测试事务中,来自不同连接的查询不会相互干扰,并且在每次测试结束时,当连接断开时,它们会被回滚。
#[test]
fn do_something() {
let repo = Repo::with_test_transactions(DATABASE_URL);
// Run some test code that accesses the repo.
// This test will be isolated, and at the end the transaction rolled back.
}
有关更多详细信息,请参阅上面链接的主要存储库中的完整示例。
依赖项
~12-24MB
~331K SLoC