gpt4 book ai didi

mysql - 如何将数据库连接传递给Rocket端点和函数?

转载 作者:行者123 更新时间:2023-12-03 11:36:59 35 4
gpt4 key购买 nike

我的Web应用程序通过Rocket具有REST API,连接到MySQL数据库,并且只有一个端点。我无法弄清楚如何访问 Controller 内部的数据库连接:

#![feature(decl_macro)]
#[macro_use]
extern crate rocket;
#[macro_use]
extern crate rocket_contrib;

use rocket_contrib::json::Json;
use serde::Serialize;

#[macro_use]
extern crate mysql;
use mysql as my;
use mysql::consts::ColumnType::MYSQL_TYPE_DATE;
use mysql::prelude::Queryable;
use mysql::Pool;

#[get("/orgs")]
fn get_orgs(conn: MyDb) -> Json<Vec<Org>> {
// I need to have the db connection here to pass it to get_all.
let o = match Org::get_all() {
Ok(o) => o,
Err(e) => panic!(e),
};

Json(o)
}

#[derive(Serialize)]
pub struct Org {
pub id: Option<i32>,
pub name: String,
}

fn main() {
let url = "mysql://root:mysql@(localhost:33061)/somedb";
let pool = Pool::new(url)?;
let mut conn = pool.get_conn();
// I need to pass "conn" around, first to get_orgs, then to Org::get_all.
rocket::ignite().mount("/", routes![get_orgs]).launch();
}

impl Org {
fn get_all(mut conn: mysql::Conn) -> Result<Vec<Org>, Err> {
let all_orgs = conn.query_map("SELECT id, name from organization", |(id, name)| Org {
id,
name,
})?;

return match all_orgs() {
Ok(all_orgs) => all_orgs,
Err(e) => e,
};
}
}
我的假设是 #[get("/orgs")]会生成大量代码。我发现了这个: https://rocket.rs/v0.4/guide/state/#databases-看起来正确,但是我无法找出一个有效的示例通过连接字符串连接到我的MySQL实例。
这是我的依赖项:
[dependencies]
rocket = "0.4.2"
rocket_codegen = "0.4.2"
rocket_contrib = "0.4.2"
serde = {version = "1.0", features = ["derive"]}
serde_json = {version = "1.0"}
mysql = "*"
如何建立MySQL连接并传递它?

最佳答案

您需要告诉Rocket您的数据库。这是通过Fairings完成的。您链接的文档实际上包括一个示例:

fn main() {
rocket::ignite()
.attach(LogsDbConn::fairing())
.launch();
}
上面的重要部分是 attach,其中数据库连接作为整流罩传递给Rocket。只有这样,Rocket才能将连接传递到您的路线,以便您可以使用它...

关于mysql - 如何将数据库连接传递给Rocket端点和函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63897356/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com