-
delete-videoProject using node.js/Cloning Youtube 2020. 8. 31. 08:38
routes.js
videoDetila, editVideo, deleteVideo와 userDetail은 다른 routes와는 다르다. 이들은 고유 id 값에 따라 보여줘야 하는 페이지가 다르기 때문이다. 다른 routes은 key-string이지만 이들은 key(함수명) - value(함수)으로 이루어져 있다. 인자로는 id 값을 받는다.
videoRouter.js
videoRouter.js를 보면은 첫번째 인자인 router를 주는 값도 다르다. 다른 router는 string을 주지만 deleteVideo()는 routes.deleteVideo()로 함수를 준다. 또한 route를 함수로 주는 router들은 다른 router들보다 항상 맨 밑에 있어야 한다. 그렇지 않으면 다른 router들은 작동하지 않는다.
예를 들어, deleteVideo()가 upload보다 위에 있을 경우, user가 localhost/videos/upload에 접속하게 되면 저 경로 접속하는 것이 아니라 deleteVideo로 접속하게 된다. 왜냐하면 JS는 코드를 위에서부터 아래로 읽기 때문에 upload가 :id 값으로 인식한다. routes.js에서 정의한 :id는 변수를 뜻한다.
videoController.js
req.params.id는 url 경로에서 :id 값을 가져온다. 해당 id 값은 videoId 값이다. 이 값으로 DB에서 video를 찾는다. populate로 가져오지 않은 video.creator는 객체이기 때문에 String으로 형변환을 해줘야 한다. 그 후 현재 user의 id 값과 비교해서 video를 삭제하려는 사용자가 video의 작성자가 맞는지를 확인한다. 그렇지 않다면 home으로 redirect 시킨다. 만약 user === creator라면 Video.findByIdAndRemove(id)로 video를 삭제한다. ( Video.findOneAndRemove({ _id: id }) )도 사용이 가능하다.
View
editVideo에서 삭제(Delete video)
삭제하고 난 후 home 화면에 아무런 video 파일이 없는 것을 확인했다.
mongo로 확인한 결과 db에도 없는 것을 확인했다.
참고 자료
소스 코드
https://github.com/zpskek/wetube-v3/commit/aa42bf9393f03c3970c9de6e667b7af50945753a
'Project using node.js > Cloning Youtube' 카테고리의 다른 글
gulp (0) 2020.09.01 Webpack (0) 2020.09.01 edit-video (0) 2020.08.31 search (0) 2020.08.30 Route protection (0) 2020.08.29