이번 시간에는 video를 업로드할때 uploader(user) 정보도 포함하도록 수정해보겠습니다.
변경에 앞서 비디오를 업로드 하면서 creator가 추가되므로 기존에 저장된 video를 삭제해줍니다.
%mongo
%use youtube(데이터베이스명)
%db.videos.remove({})
WriteResult({ "nRemoved" : 삭제된 숫자 })
가 나오면 성공
youtube
|controllers
*|videoController.js
|views
|mixins
*|videoBlock.pug
|pages
*|home.pug
export const postUpload = async (req, res) => {
const {body:{title, description}, file:{path}} = req;
const newVideo = await Video.create({
fileUrl: `${path}.mp4`,
title,
description,
creator: req.user.id
})
cosnt user = await User.findById(req.user.id);
user.videos.push(newVideo.id);
user.save();
res.redirect(`${routes.videoDetail(newVideo.id)}`);
}
export const home = async (req, res) => {
try{
// 여러 element를 불러올때도 populate 사용 가능
const videos = await Video.find({}).populate('creator');
res.render('home', { pageTitle: 'title', videos });
}
catch(e) {
console.log(e);
res.render('home', { pageTitle: 'home', videos: [] });
}
}
videoBlock에 creatorName을 전달해주기위해 코드를 추가해줍니다.
extends layouts/main
include mixins/videoBlock
block content
.videos
each item in videos
+videoBlock({
id:item.id,
title:item.title,
views:item.views,
videoFile:item.fileUrl,
creatorName: item.creator
})
원하는 탬플릿에 비디오 업로더명을 추가해봅니다.
mixin videoBlock(video = {})
.videoBlock
a(href=routes.videoDetail(video.id))
video.videoBlock__thumbnail(src=`/${video.videoFile}`, type="video/mp4")
.description
.desciption__user
.user__avatar
i.fas.fa-user-alt
.user__name
|video.creatorName
.description__text
h4.videoBlock__title=video.title
h6.videoBlock__views 조회수 #{video.views}회