NodeJS+MongoDB

NodeJS+MongoDB Part2 + PUT

hminor 2023. 6. 23. 17:41

PUT 요청으로 게시글 데이터 수정하기

우선 HTML 에서 PUT 이나 DELETE 요청이 없기에 라이브러리를 설치해보기!

npm i method-override

설치 이후 server.js 에서도 코드를 추가해주기

const methodOverride = require("method-override")
app.use(methodOverride("_method")

그리고 수정하고자 하는 페이지인 edit.ejs 파일을 만들어서 write 페이지와 똑같이 레이아웃 짜고, 여기서 아까 수정했던 method-override 코드를 form 태그에 추가하기!

추가 코드는 form 태그의 action 속성에 action = “/edit?_method=PUT” 으로 경로?_method=메서드 종류 로 추가하고 method 속성은 POST 로 해주기!

또한 form 태그를 통해 전달될 데이터의 종류로 id, title, date 값이 필요한데 id는 굳이 보일 필요가 없기 때문에 class로 d-none 을 해줬고 이건 부트스트랩을 사용한거라서 css 로 할거면 display = none 을 적용하면 될 듯?

<body>
  <%- include('nav.html')%>
  <div class="container">
    <h4 class="mt-4"><strong>글 수정 페이지</strong></h4>

    <div class="mt-3">
      <form action="/edit?_method=PUT" method="POST">
        <div class="form-group">
          <label>오늘의 할일</label>
          <input type="text" value="<%= data._id %>" class="d-none" name="id">
          <input type="text" value="<%= data.제목 %>" class="form-control" name="title">
        </div>
        <div class="form-group">
          <label>날짜</label>
          <input type="text" value="<%= data.날짜 %> " class="form-control" name="date">
        </div>
        <button type="submit" class="btn btn-danger mt-1">Submit</button>
      </form>
    </div>
  </div>
</body>

그래서 우선 edit 페이지를 보여줄 코드를 작성하기

여기서도 param을 이용해서 각 리스트에 맞는 데이터를 db에서 가져와서 보여주도록 하기

app.get("/edit/:id", (req, res) => {
  db.collection("post").findOne(
    { _id: parseInt(req.params.id) },
    (error, data) => {
      if (data === null) {
        res.render("error.ejs");
      } else {
        res.render("edit.ejs", { data: data });
      }
    }
  );
});

그리고 수정을 edit 페이지에서 한다면 server.js에서 put 요청으로 수정하는 코드를 작성하기.

여기서는 updateOne 메서드를 사용해서

첫 번째 인자로는 수정할 데이터, 두 번째 인자로는 수정 값, 세 번째 인자로는 콜백 함수를 작성

 app.put("/edit", (req, res) => {
  // form에 담긴 데이터를 서버에서 해당 게시글에 맞는 id를 찾아서 데이터를 수정하기.
  // update를 할 때는 updateOne({어떤 게시글}, {수정값}, (err, data) => {})
  //  여기서 $set 은 operator로 ~가 있으면 수정하고, 없다면 추가해주세요 라는 의미
  console.log(req.body);
  db.collection("post").updateOne(
    { _id: parseInt(req.body.id) },
    { $set: { 제목: req.body.title, 날짜: req.body.date } },
    (err, data) => {
      res.redirect("/list");
    }
  );
});

'NodeJS+MongoDB' 카테고리의 다른 글

NodeJS+MongoDB Part3 - 암호화  (0) 2023.06.27
NodeJS+MongoDB Part3 - Search  (0) 2023.06.26
NodeJS+MongoDB Part3 - User (Session, JWT, OAuth)  (0) 2023.06.23
NodeJS+MongoDB Part2  (0) 2023.06.22
NodeJS+MongoDB Part1  (0) 2023.06.04