本文介绍了如何将在 main 中初始化的变量传递给 Rocket 路由处理程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个在 main(第 9 行)中初始化的变量,我想在我的一个路由处理程序中访问对这个变量的引用.

#[get("/")]fn index() ->细绳 {返回 fetch_data::fetch(format!("posts"), &redis_conn).unwrap();//我怎样才能得到redis_conn?}fn 主(){让 redis_conn = fetch_data::get_redis_connection();//在这里初始化Rocket::ignite().mount("/", routes![index]).launch();}

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

解决方案

请阅读 Rocket 文档

a>,特别是关于状态的部分.

使用 StateRocket::manage 共享状态:

#![feature(proc_macro_hygiene, decl_macro)]#[宏使用]外部板条箱火箭;//0.4.2使用火箭::状态;结构体RedisThing(i32);#[得到("/")]fn index(redis: State) ->细绳 {redis.0.to_string()}fn 主(){让 redis = RedisThing(42);火箭::点燃().管理(redis).mount("/", 路线![索引]).发射();}

如果您想改变 State 中的值,您需要将它包装在 Mutex 或其他类型的线程安全内部可变性中.

另见:

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

另见:

I have a variable that gets initialized in main (line 9) and I want to access a reference to this variable inside of one of my route handlers.

#[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();
}

In other languages, this problem would be solvable by using global variables.

解决方案

Please read the Rocket documentation, specifically the section on state.

Use State and Rocket::manage to have shared state:

#![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();
}

If you want to mutate the value inside the State, you will need to wrap it in a Mutex or other type of thread-safe interior mutability.

See also:

See also:

这篇关于如何将在 main 中初始化的变量传递给 Rocket 路由处理程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 08:35