[Node JS] #5.3 CRUD (1)


#1. Create


1.FormとControllerのコミュニケーション

  • メソッド="POST"の場合はURL
  • にデータを送信する.
  • Formタグフォームの情報をaction="のURL
  • に送信
  • がない場合は、ページのURL
  • に送信する.
  • ルータはURLでPOST管理を行う必要がある
  • を受信する.
    Upload.pug
        form(method="POST")
            input(name="title", placeholder="Title", required, type="text")
            input(name="description", placeholder="Description", required, type="text")
            input(name="hashtags", placeholder="Hashtags, separated by comma.", required, type="text")
            input(type="submit", value="Upload Video")
    controller.js
    export const postUpload = (req, res) => {
      const { title, description, hashtags } = req.body;
      console.log(title, description, hashtags);
      return res.redirect("/");
    };

    2. Create Document

  • Schema使用フォームのデータから文書
  • を作成
  • IdはMongooseによって
  • に自動的に付与される
    Controller.js
    const video = new Video({
        title,
        description,
        createdAt: Date.now(),
        hashtags: hashtags.split(",").map(word => `#${word}`),
        meta: {
          views: 0,
          rating: 0,
        },
    });

    3. Save Document in Database

  • Async、Awaitを使用してsave()関数を実行します.
  • Mongooseは
  • Save関数
  • を提供します.
  • セーブ関数は、生成されたビデオデータ
  • を返す.
  • オブジェクトの作成と保存、および「即時作成」関数の実行の2つの方法で
  • を作成できます.

    1.オブジェクトの保存

    await video.save();

    2.Createの実行

    await Video.create({
        title,
        description,
        createdAt: Date.now(),
        hashtags: hashtags.split(",").map((word) => `#${word}`),
        meta: {
          views: 0,
          rating: 0,
        },
      });

    4. Try, Catch

    try {
        const { title, description, hashtags } = req.body;
        await Video.create({
          title,
          description,
          createdAt: Date.now(),
          hashtags: hashtags.split(",").map((word) => `#${word}`),
          meta: {
            views: 0,
            rating: 0,
          },
        });
        return res.redirect("/");
    } catch (error) {     
    return res.render("upload", {
          pageTitle: "Uplaod Video",
          errorMessage: error._message,
        });
     }

    #2. READ


    1. Router

  • MongoDBで作成されたidはランダム文字列であり、整数のみを受け入れる現在のルータには適していません
  • ランダム文字列:24バイト16進数
  • Idを正規表現に正規化:[0-9a-f]{24}
  • 2. Find

  • Expressから提供されたrequestオブジェクトからURLのIDを取得します.
  • このIDのオブジェクトは、
  • IdによってDBのビデオ収集から取得される.
  • Implement
  •   const { id } = req.params;
      const video = await Video.findById(id);