Edit Data

404·2022년 1월 9일
0

Database

목록 보기
4/9

Update data

// edit.pug
extends base.pug

block content
    h3 Edit 
    form(method="POST") 
        input(name="title", placeholder="new title", value=video.title, required, maxlength=50)
        input(name="description", placeholder="Description", type="text", required, maxlength=100, value = video.description)
        input(name="hashtags", placeholder="Hashtags, separated by comma.", type="text", required, value = video.hashtags.join())
        input(type="submit", value="Save")

front 단에서 submit이 이루어지면

videoRouter.route("/:id([0-9a-f]{24})/edit").get(getEdit).post(postEdit);

라우터를 통해 postEdit controller가 실행된다.

export const postEdit = async (req, res) => {
  const { title, description, hashtags } = req.body;
  const { id } = req.params;
  let video = await Video.exists({ _id: id }); // _id가 id인 model(Video)가 존재하는지 true or false를 반환한다.
  if (!video) {
    return res.render("404", { pageTitle: "404 Error", fakeUser });
  } else {
    await Video.findByIdAndUpdate(id, {
      title,
      description,
      hashtags: hashtags
        .split(",")
        .map((word) => (word.startsWith("#") ? word : `#${word}`)),
    });
    return res.redirect(`/videos/${id}`);
  }
};
  1. let video = await Video.exists({ _id: id });
    DB안에서 조건에 맞는 data가 있는지 확인하여 boolean을 반환한다.

  2. await Video.findByIdAndUpdate(id, {data})
    모델에서 id를 통해 data를 찾은 후 object의 내용을 업데이트한다.

  3. 직관적이지만 손이 많이가는 방법

    	video.title = title;
    	video.description = description;
    	video.hashtags = hashtags
      		.split(",")
     		 .map((word) => (word.startsWith("#") ? word : `#${word}`));
   		 await video.save();

위처럼 model data를 일일히 수정해줄수도 있지만 수정해야 하는 부분이 많으면 코드가 길어지고 효율이 떨어지게 된다.

profile
T.T

0개의 댓글