# Video 삭제
비디오 삭제는 어떤 POST작업도 필요하지 않기 때문에, GET으로만 구성하면 된다.
# Routes
비디오 삭제 역시 id를 통해서 삭제를 할 것이기 때문에 아래와 같이 deleteVideo routes를 id를 parameter로 받는 함수로 변환시켜준다.
// routes.js
//...
const DELETE_VIDEO = "/:id/delete";
// Router Object
const routes = {
// ...
// id가 존재한다면 /videos/${id}/delete를 return하고,
// 존재하지 않는다면, DELETE_VIDEO를 return한다.
// deleteVideo는 string을 return하는 함수이다.
deleteVideo: (id) => {
if (id) {
return `/videos/${id}/delete`;
} else {
return DELETE_VIDEO;
}
},
};
export default routes;
# Router
// routers/videoRouter.js
import express from "express";
import routes from "../routes";
import {
videoDetail,
deleteVideo,
getUpload,
postUpload,
getEditVideo,
postEditVideo,
} from "../controllers/videoController";
import { uploadVideo } from "../middlewares";
const videoRouter = express.Router();
// ...
// Delete Video
// routes의 deleteVideo는 함수이기 때문에 실행시켜줘야한다.
videoRouter.get(routes.deleteVideo(), deleteVideo);
export default videoRouter;
# Controller
// controllers/videoController.js
import routes from "../routes";
import Video from "../models/Video";
// ...
export const deleteVideo = async (req, res) => {
const {
params: { id },
} = req;
try {
// mongoose의 findOneAndRemove 쿼리를 이용해서 비디오를 삭제한다.
await Video.findOneAndRemove({ _id: id });
} catch (err) {}
res.redirect(routes.home);
res.render("deleteVideo", { pageTitle: "Delete Video" });
};
# Pug
editVideo 화면의 Delete Video 버튼의 링크를 routes.deleteVideo(video.id)
로 지정해준다.
// views/editVideo.pug
// ...
// video object에서 id를 받아와서 deleteVideo routes로 전달해준다.
a.form-container__link.form-container__link--delete(href=routes.deleteVideo(video.id)) Delete Video