1. Populate
- see 컨트롤러에서 하고 있는건 owner가 user._id인 모든 영상을 url에 있는 user id를 가지고 찾는 것
- 기존의 코드가 나쁜건 절대 아니지만 더 나은 방식이 있음
- models 폴더를 보면 Video는 1개의 owner를 가지고 있고, owner는 여러개의 영상을 업로드 할 수 있음
- 위 논리를 바탕으로 User 모델 안에 배열을 생성
- 배열에는 객체를 채우면 되는데 우린 ObjectId를 사용
videos: [{ type: mongoose.Schema.Types.ObjectId, ref: "Video" }],
- 이제 video 컨트롤러를 수정해야 하는데, 이유는 우리가 영상을 업로드할 때 추가적으로 할 것들이 있기 때문
- 우린 Video owner에 사용자의 _id를 저장하고 있었는데 이제는 새로 업로드 될 영상의 id를 User 모델에도 저장해야함
- 지금 우리는 유저의 id를 Video의 owner에 추가하고 있음
- 다행스럽게 create()가 새로 만드는 Video를 return 해줌
- 그 말은 우리가 가진 id로 사용자를 검색할 수 있고, newVideo의 id를 User의 videos 배열에 추가할 수 있음
- 업로드도 잘 되고 db에 users에 videos 배열에 추가되고 있으며, videos에는 owner id가 있음
- profile 템플릿까지 수정하고 나니, 유저마다 업로드한 영상 목록이 잘 나옴
- 지금까지 relationship(관계)에 대해 배웠음
- 업로드된 여러개의 영상과 어떻게 관계를 구축하면 되는지 알게 됐음
- 유저 1명은 여러 개의 영상을 업로드할 수 있고, 영상은 업로드한 유저가 오너가 됨
- 1:N의 관계라는 것
- 지금 한가지 문제점이 있는데, postUpload 컨트롤러에서 user.save()를 할 때마다 비밀번호를 반복적으로 해싱하고 있음
- save()를 사용하게 되면, 모델에 있는 pre-save 미들웨어가 실행된다는 것
- 갓갓 chatgpt 덕분에 바로 이해해버림
2. Bugfix
- 그러고보니 아까 깃허브로 로그인 했을때는 괜찮았다가, 홈페이지에서 회원가입한 이후 영상을 올리고 다시 로그인 했을 때 비밀번호가 틀렸다고 나옴
- 그땐 내가 한자리 비밀번호도 바꾸고 까먹은건가 했는데 그게 바로 지금의 버그였음
- 버그를 해결하기 위해선 비밀번호가 변경됐을 때만 pre-save 미들웨어가 실행되게 바꾸면 됨
- 다음 버그는 videoController에 있음
- 영상 수정과 삭제 버튼을 기존에는 세션 정보를 통해 가리거나 보여줬음
- url을 통해 강제로 접속하면 가능하다는 것
- 영상의 주인이 아니면 두 기능을 아예 사용할 수 없게 해야함
- 그냥 if에 넣고 조건문을 사용했다면 버튼이 안나왔을거임
- 그말은 두 변수의 타입이 다르다는것
- video.owner는 object, _id는 string인데, 혹시 모를 상황에 대비해 양쪽다 String으로 감싸줌
- https://github.com/Daniel-Jeon/wetube-loaded/commit/f1003e23110678e8491a1331c52cf6b07a5973f6
'개발 > Node.js' 카테고리의 다른 글
Flash Message (0) | 2024.11.23 |
---|---|
Views API (0) | 2024.11.19 |
User Profile (0) | 2024.11.14 |
Upload Video (0) | 2024.11.14 |
File Upload (0) | 2024.11.13 |