首页 > 解决方案 > 如何将 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();
}

在其他语言中,这个问题可以通过使用全局变量来解决。

标签: rustrust-rocket

解决方案


请阅读Rocket 文档,特别是关于状态的部分

使用StateRocket::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或其他类型的线程安全内部可变性中。

也可以看看:

这个问题可以通过使用全局变量来解决。

也可以看看:


推荐阅读