YouTube#5-5 MongoDBのクローン:Mongooseを使用してデータをロードする


🔖 カリキュラム:6.12~6.14

Preview


前回はCRUDの仕事前の設定のためにSchema, mongoose.model()を使用してdbに送信するデータ型を定義します.
この授業.findメソッドを使用して作成されたデータフォーマットは、データを要求および受信します.

レッスン内容


データ要求(クエリーの生成)


Step 0)サーバファイルの再パッケージ


他の操作を実行する前に、dbに関連するすべてのデータ型がインポートされます.jsファイルが長くなることを考慮して、きれいに二つに分けることにしました.
  • 1) src/server.js:サーバ設定に関連するコンテンツのみを保持します.
    2) src/init.js:initファイル(initialize、すなわち主に初期化に使用されるファイル名)を作成し、サーバの開閉を担当する子供をここに連れて行きます.db接続もサーバを開くときに実行されるため、一緒にインポートされます.
  • import "./db";
    import "./models/Video";
    import app from "./server";
    
    const PORT = 4000; 
    
    const handleListening = (req, res) => {
        console.log(`🚀 Sever listening on port http://localhost:${PORT}`)
    };
    
    app.listen( PORT, handleListening );
  • nodemonをリセット:nodemonはサーバの起動時に実行されるため、パッケージ化されます.jsonでnodemonが表示するファイルはserverです.jsではなくinitです.jsに変更しても間違いはありません.
  •  "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "dev": "nodemon --exec babel-node src/init.js"
      },

    step 1) .find()を使用してdbを読み込む

  • fake db deleted
  • import Video models
  • Video.find(fillter, callback) 🌟
    https://mongoosejs.com/docs/api.html#model_Model.find
  • Step 1-1)読み込まれたdbコールバック関数として使用🌟

    import Video from "../models/Video";
    
    
    export const trending = (req, res) => {
      Video.find({}, (error, videos)=> {
        return res.render("home", { pageTitle:"Home", videos });
      })
    }
    ! なぜここでcallback関数を使用するのか
    コールバック関数が起動します.dbの場合、JavaScriptの管轄から外れているため、複数の変更が発生する可能性があるため、プログラムがこれらの変更で正常に動作するようにdebe関連関数をコールバック関数として保持し、後で使用する準備をします.プログラムを実行後に実行するように設定します.

    Step 1-2)を使用して読み込まれたdb promise🌟


    model.find(filter)はデータの検索を停止し、コールバックではなくpromise構文を使用して関数を作成する方法を学習します.
    promise構文とは、async(非同期)とawait(実行待ち)のキーワードを使用してデータベースがデータを見つけるのを待つ(まず以下の操作を実行するのを阻止する)構文です.
    export const trending = async (req, res) => {
      const videos = await Video.find({});
      return res.render("home", { pageTitle:"Home", videos });
    }
    エラーはtry-catchドアでつかみます.
    export const home = async (req, res) => {
      try {
        const videos = await Video.find({});
        return res.render("home", { pageTitle: "Home", videos })
      } catch (error) {
        console.log("server error", error)
      }
    }
    🌟 簡単に言えば、callbackは、実行時に関数内の関数(高次関数)によって決定される.この場合、高次関数は.findは実行時以降にコールバック関数を実行するように設定されているそうです.待機は待機であり、待機関数は正常に動作します.実行するまで、次のコードには移動しません.データ転送は少ないが、エラーを防ぐために以下のコードを実行します.
  • では、上記のコールバック関数は関数trendingに位置する.関数の中の関数です.これらの関数の関数が返されても、trendingは結果を返しません.関数の関数がreturnを使用する場合、次のコマンドは実行しないでください.実際の見返りではない.
  • 追加学習?


  • callback vs.promise(async,await)の理解
    model.find(filter,callback)メソッドを使用してdbでフィルタ条件に合致するデータを検索し、関数を設定して結果を受信して特定の機能を実行します.この関数はdb状態によっては起動できない可能性があるのでcallback関数に設定すると、エラーが発生してもアプリケーション全体の実行に影響しません.
    *コールバック関数の概念はモダンjavascript 12章の関数部分でよく整理されています.もう一度読みなさい
  • サマリ

  • model.find()を使用してdbに必要なデータとノードを検索します.js接続
  • は、コールバックとpromisの概念をさらに理解した.