rust - 如何将 main 中初始化的变量传递给 Rocket 路由处理程序?
问题描述
我有一个在(第 9 行)中初始化的变量,main
我想在我的一个路由处理程序中访问对这个变量的引用。
#[get("/")]
fn index() -> String {
return fetch_data::fetch(format!("posts"), &redis_conn).unwrap(); // How can I get redis_conn?
}
fn main() {
let redis_conn = fetch_data::get_redis_connection(); // initialized here
rocket::ignite().mount("/", routes![index]).launch();
}
在其他语言中,这个问题可以通过使用全局变量来解决。
解决方案
使用State
和Rocket::manage
共享状态:
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use]
extern crate rocket; // 0.4.2
use rocket::State;
struct RedisThing(i32);
#[get("/")]
fn index(redis: State<RedisThing>) -> String {
redis.0.to_string()
}
fn main() {
let redis = RedisThing(42);
rocket::ignite()
.manage(redis)
.mount("/", routes![index])
.launch();
}
如果要改变 内部的值State
,则需要将其包装在一种Mutex
或其他类型的线程安全内部可变性中。
也可以看看:
这个问题可以通过使用全局变量来解决。
也可以看看:
推荐阅读
- python - 如何在基于类的视图中使用烧瓶路线?
- asp.net-mvc - 如何在 MVC 中进行子字符串化。我在这里有什么错?
- java - 为什么在访问字段和方法时点之间的空格没有编译错误?
- javascript - 在按钮单击时有条件地格式化 JSX
- spring-security - 使用 Spring Security 进行验证
- java - 如何在使用过多重绘时防止延迟
- django - 我的用户配置文件更新表单未出现在我的模板中
- swift - 预期返回“双”的函数中缺少返回 | 该怎么办?
- sql - tSQLt 应用 NOT NULL 约束
- python-3.x - 在在线编译器中运行良好,但未在终端中运行。PYTHON