0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GraphqQL初心者の受講メモ

Posted at

はじめに

最短・最速で学ぶGraphQL実践入門 新たなAPI規格をマスターしよう! サーバーサイドCRUD編 (Node.js)
の受講メモです(無料でこれだけ勉強できるなんて、、、)
これだけじゃよくわからないので何かの間違いでこの記事に辿り着いた方は受講をお勧めします

セットアップ

  1. npm initでjsonファイル作成
  2. npm install expressでjsonに追加
  3. app.jsでexpress読み込み
    appオブジェクトではwebアプリケーションに必要な変数・メソッド保持
  • lisetenメソッド:サーバ起動
  • nodemonで起動すれば変更保存時自動で再起動
  • graphqlHTTPオブジェクト
  1. npm install nodemon json追加  nodmon appで起動
  2. npm install graphql express-graphql
  3. 一つのエンドポイントを実現するためにミドルウェアappオブジェクトよりappメソッド

スキーマ定義

graphqlの仕様を表現
データをどのように扱うか、リレーションの定義

  1. Movieタイプの生成
  2. ルートクエリの作成

mongoDBの設定

  1. クラスター作成
  2. ユーザ作成
  3. クラスター選択 -> コネクト -> DB接続url
  4. npm install mongoose
  5. appにmongooseオブジェクト作成→.connectで接続url設定
  6. データ作成

データベースモデルの作成

  1. models -> movie.js

  2. モデルをschema.jsで読み込み

  3. そのままresolve関数の記述

  4. module.exports = new GraphQLSchema→app.jsで読み込み

  5. ミドルウェアに追加(一緒にgraphiQL設定)

ミューテーション(データ更新処理)

  1. クエリ同様schemaにミューテーションオブジェクト作成
    ☆typeとmodelの違いを調べる必要あり
  2. exportsするGraphQLSchemaに追加
  3. graphiQLからmutation実行

DirectorTypeの追加

流れ予想

  1. スキーマでDirectorType作成→◯
  2. RootQueryのfieldsにdirector追加→×追加には不要、その後実装だった
  3. MutationのfieldsにaddDirector追加→◯
  4. models -> director.js作成→◯
  5. スキーマでdirectorモデル読み込み→×と思いきや◯
    addメソッドのnewではなぜかDirector(モデル)ではなくDirectorTypeで作成
    ←講師の勘違い、あってた
    再度GraphiQL実行、→mutation失敗←resolve関数のsaveメソッド忘れ、解決
    collectionに追加確認、_v属性って何だろう。。。0が入ってたけど→データの更新回数カウント

Type間にリレーション追加

  1. MovieモデルのSchemaにDirectorID追加
  2. schema.jsのMovieモデルfieldsにdirector(IDじゃないよ、ID以外の情報も欲しいでしょうが)追加(ここのtypeはDirectorType)、Director情報取得用のresolve追加
  • ってことはmodelファイルの方には単純に保持しているデータ、schemaの方にはそのデータから表示したい情報まで記述か!
  • resolve関数のparentってTypeの元になってるモデルファイルで定義したパラメータが入ってる、Typeの親がModelってことなのね
  1. schmea.jsのDirectorモデルfieldsにmovies追加、typeはnew GraphQLList(MovieType)←ただのGraphQLListじゃない
    resolve関数のreturnはfindByIDではなく(そりゃそう、DirectorIDに一致してるMovieIDの映画なんてあるかい)、DirectorIDがparent.idに一致している映画全部を検索する
  2. mutationの変更、addMovieにDirectorID追加

一覧取得

RootQueryに追加、特に不明点なし

mutationに更新処理追加

  1. updateDirector追加
    ※javascriptの&&は左がfalseなら左を返し、左がtrueなら右の値を返す
    戻り値はfindByIdAndUpdateメソッドでargs.idと一致したdirectorをupdateし、第3引数の{new: true}で変更後の値を取得
  2. 同様にupdateMovie追加

mutationにデリート処理追加

  1. deleteMovie追加
    ※findByIdなどはmongooseのメソッド
    findByAndRemoveで削除
  2. deleteDirector追加
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?