분류 전체보기
-
edit-videoProject using node.js/Cloning Youtube 2020. 8. 31. 08:03
routes.js videoDetila, editVideo, deleteVideo와 userDetail은 다른 routes와는 다르다. 이들은 고유 id 값에 따라 보여줘야 하는 페이지가 다르기 때문이다. 다른 routes은 key-string이지만 이들은 key(함수명) - value(함수)으로 이루어져 있다. 인자로는 id 값을 받는다. videoRouter.js videoRouter.js를 보면은 첫번째 인자인 router를 주는 값도 다르다. 다른 router는 string을 주지만 videoDetail은 routes.editVideo()로 함수를 준다. 또한 route를 함수로 주는 router들은 다른 router들보다 항상 맨 밑에 있어야 한다. 그렇지 않으면 다른 router들은 작동하지 ..
-
searchProject using node.js/Cloning Youtube 2020. 8. 30. 21:07
routes.js globalRouter.js videoController.js header 부분에 동영상을 검색할 수 있는 search 칸이 있다. 서버에게 주는 검색 String의 name은 "term"이다. search의 term 값은 req.query로 받는다. 그 후 Model.find() 메소드를 사용해서 user가 입력한 값을 가지고 있는 title을 찾는다. 이때 title 조건을 줬는데 Video.find({ title: { $regex: term, $options: 'i' } })에서 빨간색 부분이다. $regex는 정규 표현식을 뜻한다. $regex의 value에 pattern 값을 준다. pattern 값은 term이다. 즉 videos에 있는 title중 term을 포함하는 str..
-
Route protectionProject using node.js/Cloning Youtube 2020. 8. 29. 09:32
허가받지 않은 user가 url을 추측해서 침입할 수가 있다. 예를 들어 localhost/users/edit-profile처럼 빨간색 글씨를 추측해서 함부로 타인의 계정을 수정하거나 삭제할 수가 있다. 이러한 접근을 막기 위해서 route를 보호해야 한다. middlewares.js 현재 user가 로그인이 되어 있으면 승인을 하고 그렇지 않다면 home으로 redirect 시킨다. user가 로그인이 되어 있고 다른 계정을 침투하려고 하면 어떻하냐고 생각할 수가 있는데, 밑에 router에 middleware로 준 것을 보면 그렇지가 않다. 예를 들어 getEditProfile을 보면 무조건 자신의 userId 값에 editProfile 페이지로 넘어가기 때문이다. globalRouter.js use..
-
homeProject using node.js/Cloning Youtube 2020. 8. 29. 09:13
routes.js globalRouter.js videoController.js Video.find({})로 모든 video 파일들을 가져온다. videoBlock에 creator도 추가해줘야 하기 때문에 populate('creator')로 creator도 가져온다. video는 맨 처음 upload된 파일이 배열의 맨 앞에 있다. 하지만 우리는 나중에 올린 것이 최신 파일이기 때문에 처음으로 보고 싶다. 그러기 위해서 sort({_id : -1})을 해준다. -1값을 줘서 순서를 reverse한 것이다. View 참고 자료 노마드 코더의 유튜브 클론 강의 소스 코드 https://github.com/zpskek/wetube-v3/commit/482383c86af53ff91b929bbbf4b4fb63f..
-
userDetailProject using node.js/Cloning Youtube 2020. 8. 29. 08:10
routes.js userDetail은 다른 routes와는 다르다. 이들은 고유 id 값에 따라 보여줘야 하는 페이지가 다르기 때문이다. 다른 routes은 key-string이지만 이들은 key(함수명) - value(함수)으로 이루어져 있다. 인자로는 id 값을 받는다. userRouter.js userRouter.js를 보면은 첫번째 인자인 router를 주는 값도 다르다. 다른 router는 string을 주지만 userDetail은 routes.userDetail()로 함수를 준다. 또한 route를 함수로 주는 router들은 다른 router들보다 항상 맨 밑에 있어야 한다. 그렇지 않으면 다른 router들은 작동하지 않는다. 예를 들어, userDetail()이 editProfile보다..
-
videoPlayer.pugProject using node.js/Cloning Youtube 2020. 8. 29. 08:10
View pug의 기능 중 mixin이라고 있다. 여러 페이지에서 중복되는 코드 블록을 떼어내서 하나의 파일로 만들고 include를 통해서 다른 파일들이 이 mixin 모듈을 사용하는 것이다. 사용하는 방법은 include로 먼저 파일을 불러오고 "+({ mixin을 부르는 파일에 있는 변수 명(videoDetail 변수 명) : mixin의 변수 명(videoPlayer의 변수 명) })" 를 하면 된다. mixin 파일은 pug와 똑같은 방식으로 작성하되 맨 위에 mixin (mixin 파일이 정의하는 변수 명={}) 을 추가하면 된다. 그렇게 되면 다음과 같이 videoPlayer가 화면에 나온다. (화면이 검은 이유는 내가 올린 영상의 thumbnail이 검은색이기 때문이다.) 참고 자료 노마드..
-
videoDetailProject using node.js/Cloning Youtube 2020. 8. 29. 08:00
routes.js videoDetila, editVideo, deleteVideo와 userDetail은 다른 routes와는 다르다. 이들은 고유 id 값에 따라 보여줘야 하는 페이지가 다르기 때문이다. 다른 routes은 key-string이지만 이들은 key(함수명) - value(함수)으로 이루어져 있다. 인자로는 id 값을 받는다. videoRouter.js videoRouter.js를 보면은 첫번째 인자인 router를 주는 값도 다르다. 다른 router는 string을 주지만 videoDetail은 routes.videoDetail()로 함수를 준다. 또한 route를 함수로 주는 router들은 다른 router들보다 항상 맨 밑에 있어야 한다. 그렇지 않으면 다른 router들은 작동하..
-
UploadProject using node.js/Cloning Youtube 2020. 8. 29. 07:21
videoRouter.js getUpload는 사용자에게 보여지는 editProfile 페이지를 보여주는 랜더링 작업을 한다. 그렇기 때문에 get 방식으로 보낸다. postUpload는 사용자가 정보를 수정하고 submit했을 때 정보를 처리하는 로직이다. 정보는 url 파라미터에 노출 되면 안 되고 수정되는 정보는 post 방식으로 제출해야 하기 때문에 post 방식으로 보낸다. videoController.js upload 페이지를 랜더링해서 보여준다. 사용자로부터 videoFile, title과 description을 받는다. 받은 값을 토대로 Video.js에 만든 videoSchema를 통해 DB에 video를 저장한다. req.user.videos.push()는 DB에 있는 video의 작성..