NestJSとGraphQL CRUDを試してみてください


1.データベース連動


  • バインドされたデータベース設定で値を合わせます.ここで、受信したデータベースは、データベース名とパスワードのみを再設定します.

  • エラーの解決:
    er_not_supported_auth_mode: client does not support authentication protocol requested by server; consider upgrading mysql client
  • 解決
  • :後で使うパスワードで初期化すればいいのですが、私は「」でパスワードを初期化しただけです.
  • alter user 'einere'@'%' identified with mysql_native_password by 'mypassword';
  • の場合、データベースの内容が初期化される可能性があります...ㅠ
  • 2.Playground(CRUD)の使用


    コメントリンク

    1.受信したクローンからnpm installをダウンロード


    2.npm run start:dev実行サーバ


    3. http://localhost:4000/graphqlに入る



    4.実験内容

  • mutation (create)
  • mutation{
      createCat(input:{
        name :"Name",
        description : "Description"
      }
      ){
        ok
        error
        __typename
      }
    }
  • get (read)
  • query{
      getCat(input:{
        id :1
      }){
        error
        ok
      }
    }
    解析器、サービス、dto、entityで規定されているように入力するしかありません.

    5.追加試行:支店を再開設して行う


    全体の原理に対する考え方:解析器とサービス間の通信ではdto形式でサーバと接続されていると考えられる.

  • update
  • mutation{
      updateCat(input:{
        id :3,
        name : "냥이",
        description : "냥이입니다."
        # create와 달리 id가 들어간다.
      }){
        error
        ok
        __typename
      }
    }
  • mysqlに接続された3回のデータ交換
  • 入力とみなす->オブジェクトタイプ(output)
    このために作成された他のコード
    import { InputType, ObjectType, PartialType, PickType } from "@nestjs/graphql";
    import { CoreOutput } from "src/common/dtos/output.dto";
    import { Cat } from "../entities/cat.entity";
    
    @InputType()
    export class UpdateCatInput extends PickType(Cat, ["id", "name", "description"]){
        // PickType으로 원하는 자료를 가져온다.
    }
    
    @ObjectType()
    export class UpdateCatOutput extends CoreOutput {
    
    }
        @Mutation(returns => UpdateCatOutput)
        async updateCat(
            @Args('input') updateCatInput: UpdateCatInput
        ): Promise<UpdateCatOutput>{
            return this.catService.updateCat(updateCatInput)
        }
    async updateCat(updateCatInput: UpdateCatInput): Promise<UpdateCatOutput> {
            try {
    
                /* update Cat */
                await this.cats.update(updateCatInput.id, {...updateCatInput});
    
    
                return {
                    ok: true
                }
    
            }catch(e){
                console.log(e);
    
                return {
                    ok: false,
                    error: "Cannot update cat"
                }
            }
        }
  • delete
  • mutation{
      deleteCat(input:{
        id : 2,
        name : "Nero",
        description : "Description"
      }){
        error
        ok
        __typename
      }
    }
    何を削除するかを確認

    前の内容はdeleteに変更するだけです.