본문 바로가기
데이터베이스

mongoose-express 데이터 삭제하기

by 즐거운코딩 2023. 8. 22.
반응형

기본적인 데이터 처리작업인 CRUD 중에서 이번에는 Delete(삭제) 기능을 구현해보겠습니다.

 

  1. 상세페이지에 삭제 버튼 만들기
  2. 데이터 삭제 처리 및 삭제 후 초기화면으로 이동(redirect) 하기

 

1.  상세페이지 화면인 show.ejs 에 삭제 기능 구현

DELETE버튼을 추가하고 method중 delete를 처리하기 위해 method-override 를 이용해서 쿼리스트링으로 POST method를  DELETE로 변경하여 사용해보겠습니다.

 (...)
 <body>
    <h1><%= product.name %></h1>
    <ul>
      <li>Price $<%= product.price %></li>
      <li>Category <%= product.category %></li>
    </ul>
    <a href="/products">All Products</a>
    <a href="/products/<%=product._id%>/edit">Edit Product</a>
    <form action="/products/<%=product._id%>?_method=DELETE" method="POST">
      <button>Delete</button>
    </form>
  </body>
  (...)

삭제기능버튼 선택시 delete method로 보내는데 라우트 설정이 되어 있지않아 오류납니다. 

 

2.  index.js에서 delete method 처리하기 위한 라우트 생성

데이터베이스에서 데이터 삭제시 시간이 걸리므로 async/await 비동기로 처리합니다.

삭제기능은 mongoose의 findByIdAndDelete 메소드를 사용하여 삭제할 데이터의 id 를 전달합니다.

데이터가 삭제되면 해당 product의 상세페이지도 없어지기 때문에 index 페이지로 이동하도록 리다이렉트(redirect) 합니다.

app.delete("/products/:id", async (req, res) => {
  const { id } = req.params;
  const deletedProduct = await Product.findByIdAndDelete(id);
  res.redirect("/products");
});

중복데이터인 Purple Cherry Tomato 삭제 전, 후 비교

Delete 기능까지 하여 CRUD 모든 기능을 구현해 보았습니다.

반응형