[Node JS] #5.3 CRUD (1)

2900 단어 node jsnode js

#1. Create

1. Form과 controller의 소통

  • Method=”POST”일 때 데이터를 URL로 전송
  • Form 태그에서는 action=””의 URL로 form의 정보를 전송
  • 없을 경우, 페이지의 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에 맞춰 form에서 받은 데이터를 이용하여 document 작성
  • 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() 함수 실행.
  • Save 함수는 mongoose에서 제공
  • Save 함수는 생성된 video 데이터를 return
  • 객체를 생성 후 저장하는 방법과 바로 create함수를 실행하는 두 가지 방법으로 생성 가능

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

  • Mongo DB에서 만든 id는 랜덤 문자열이기 때문에 정수만 받는 현재 라우터와 적합하지 않음
  • 랜덤 문자열: 24 bytes hexadecimal
  • Id를 regular expression으로 정규화: [0-9a-f]{24}

2. Find

  • Express에서 제공하는 request 객체를 통해 URL의 id를 가져온다.
  • Id를 통해 DB의 video collection에서 해당 id의 객체를 가져온다.
  • Implement
  const { id } = req.params;
  const video = await Video.findById(id);

좋은 웹페이지 즐겨찾기