Как я могу передать переменную, инициализированную в main, обработчику маршрута Rocket? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть переменная, которая инициализируется в main (строка 9), и я хочу получить доступ к ссылке на эту переменную в одном из моих обработчиков маршрута.

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

В других языках этопроблема может быть решена с помощью глобальных переменных.

1 Ответ

1 голос
/ 27 марта 2019

Пожалуйста, прочитайте документацию Rocket , в частности, раздел о состоянии .

Используйте State и Rocket::manage для общего состояния:

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use]
extern crate rocket;

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

См. Также:

, эту проблему можно решить с помощью глобальных переменных.

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...