ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • delete-video
    Project 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

    댓글

Designed by Tistory.