Open SuguruOoki opened 2 years ago
状態を持たせる際には次の手順がいる
#[get("/")]
と.route("/", web::get().to(index))
が被ると同じことを二重で書いてるのでエラーが出る模様#[get("/")]
async fn index(data: web::Data<AppStateWithCounter>) -> String {
let mut counter = data.counter.lock().unwrap(); // <- get counter's MutexGuard
*counter += 1; // <- access counter inside MutexGuard
format!("Request number: {counter}") // <- response with count
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
// Note: web::Data created _outside_ HttpServer::new closure
let counter = web::Data::new(AppStateWithCounter {
counter: Mutex::new(0),
});
HttpServer::new(move || {
// move counter into the closure
App::new()
.app_data(counter.clone()) // <- register the created data
.route("/", web::get().to(index))
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
実装を終えると次のような画面となる https://gyazo.com/7471612d31da54112ad2957b91e8ed4a
web::scopeについての理解はしたが、実装については別途時間がかかりそうなので、一旦スキップする。 スコープを絞ったりをしたいが、いまいちわかってないので、後ほど詳細を調査するものとする。
Rustのファイル分割などについてちゃんとキャッチアップの必要が出てきそう。 https://qiita.com/kerupani129/items/bd41d8a07daa31256aab
actix-webだけでなくて、Rustのエコシステム周りについても少しずつキャッチアップしていく必要がある。 現状RailsをやってRubyについて知らないのと全く同じ状態なので、できること少なくてきっついw
こちらのページを進めていく。