見出し画像

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


関連タグ

#mysql #rust   #axum #sqlx

この記事が気に入ったらサポートをしてみませんか?