-
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 값을 받는다.
routes.js - DELETE_VIDEO routes.js - deleteVideo 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는 변수를 뜻한다.
videoRouter.js 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 }) )도 사용이 가능하다.
deleteVideo View
삭제 전 editVideo에서 삭제(Delete video)
editVide 삭제하고 난 후 home 화면에 아무런 video 파일이 없는 것을 확인했다.
home 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