我正在使用Prisma和Axum创建一个Rust后端。我试图找出最好的方法(或任何工作方式)将我的连接传递到我的rust routes。我在main中创建了一个新的客户端,我将其传递到routes mod,然后传递到每个路由。我认为问题在于我没有将我的连接字符串放入我的客户端,但我不确定这是否是问题所在。我还在这个prisma-client-rust示例中看到,他们创建了一个db.rs文件,但db.rs被忽略,因此我无法看到该文件是如何设置的。我正在成功编译代码,但它返回一个空向量。
下面是我创建连接的主要位置,但是我不认为我正在放入连接字符串,并且我无法找到一种方法来传递我的连接字符串。我确实有一个.env文件与连接字符串。
#[tokio::main]
async fn main() {
let client = Arc::new(PrismaClient::_builder().build().await.unwrap());
//create_routes is in mod.rs below
let app = create_routes(client);
axum::Server::bind(&"0.0.0.0:3000".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}
我尝试将客户端传入mod,最后是我的路由。下面是我的mod:
use axum::{Router, routing::get, Extension};
use hello_world::hello_world;
use handle_grades_get::handle_grades_get;
use std::sync::Arc;
use crate::PrismaClient;
pub fn create_routes(client: Arc<PrismaClient>) -> Router<> {
Router::new().route("/", get(hello_world))
.route("/getgrades", get(handle_grades_get))
.layer(Extension(client))
}
这是我的路线:
use crate::{prisma::l_2_l_3_chemresult_02, PrismaClient};
use axum::{Extension, Json};
use std::sync::Arc;
pub async fn handle_grades_get(
Extension(client): Extension<Arc<PrismaClient>>,
) -> Json<Vec<l_2_l_3_chemresult_02::Data>> {
let samples = client
.l_2_l_3_chemresult_02()
.find_many(vec![l_2_l_3_chemresult_02::heatid::equals(Some(
"80".to_string(),
))])
.exec()
.await
.unwrap();
return Json(samples);
}
1条答案
按热度按时间gmxoilav1#
我相信你在找with_state。
我还没有测试过这个,但这是朝着正确方向迈出的一步!
您可以在此处看到应用程序状态的示例:https://github.com/tokio-rs/axum/blob/main/examples/key-value-store/src/main.rs