axumとsqlxを使い、mysqlから取得した値をブラウザーに表示させる
要件
axumとsqlxを使い、mysqlから取得した値をブラウザーに表示させる
タスク
axumとsqlxを使い、mysqlから取得した値をブラウザーに表示させる
参考記事
▼お金かかりますが、やはり分かりやすいです!
▼envからDBのURLを取得する方法
▼Rustでjsonを扱う方法
▼rustのファイル分割って大変なのね、、
▼axumのrouteを綺麗にしたいときにとても参考になります!
学べること
sqlxを使いrustでmysqlを操作する方法
ヒント
dbを以下のようにdockerっで設定するした場合のdbのエンドポイント
version: "3.8"
services:
db:
image: rust_db
container_name: rust_db
build: ./mysql/
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: rust_db
MYSQL_USER: docker
MYSQL_PASSWORD: docker
ports:
- "3310:3306"
volumes:
- rust_db:/var/lib/mysql
volumes:
rust_db:
.env
DATABASE_URL=mysql://docker:docker@localhost:3310/rust_db
DBのコネクションを取得する関数
use std::{env};
use sqlx::{MySql, MySqlPool, Pool};
use dotenv::dotenv;
// DBコネクションを取得
pub async fn conn() -> Pool<MySql> {
dotenv().ok();
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
let pool = MySqlPool::connect(&database_url)
.await
.unwrap();
pool
}
main 関数の中身
#[tokio::main]
async fn main() -> std::io::Result<()> {
let pool = infra::db::conn().await;
let app = Router::new()
.route("/health", get(health_check))
.route("/books", get(book_list))
.layer(Extension(Arc::new(pool)));
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
Ok(())
}
関連タグ
この記事が気に入ったらサポートをしてみませんか?