복습 - VIEWS API
복습 - VIDEO RECORDER
복습 - WEBASSEMBLY VIDEO TRANSCODE
실제 코드는 github에 올림(wetube_v2)
💡 fileName input[type="text"]에 focus 이벤트 발생 시 파일 선택 창 띄우기 (추가)
- watch.pug ( thumb.pug와 avatar.pug도 마찬가지 )
div.upload.upload-video input.upload-video__file-name(value="VIDEO 파일" readonly) label.upload-video__label(for="video" readonly) i.fas.fa-file-import input.upload-video__file(name="video", type="file", accept="video/*", id="video", required)
- fileName.js
const videoFileName = document.querySelector(".upload-video__file-name"); const thumbFileName = document.querySelector(".upload-thumb__file-name"); const avatarFileName = document.querySelector(".upload-avatar__file-name"); const videoFileInput = document.querySelector(".upload-video__file"); const thumbFileInput = document.querySelector(".upload-thumb__file"); const avatarFileInput = document.querySelector(".upload-avatar__file"); const videoLabel = document.querySelector(".upload-video__label"); const thumbLabel = document.querySelector(".upload-thumb__label"); const avatarLabel = document.querySelector(".upload-avatar__label"); const showFileName = (fileInput, fileName) => { fileInput.addEventListener( "input", (event) => (fileName.value = event.target.files[0].name) ); }; const openUploader = (fileName, fileLabel) => { fileName.addEventListener("focus", () => fileLabel.click()); }; if (videoFileInput) { showFileName(videoFileInput, videoFileName); openUploader(videoFileName, videoLabel); } if (thumbFileInput) { showFileName(thumbFileInput, thumbFileName); openUploader(thumbFileName, thumbLabel); } if (avatarFileInput) { showFileName(avatarFileInput, avatarFileName); openUploader(avatarFileName, avatarLabel); }
export const deleteVideo = async (req, res) => {
const { _id } = req.session.user;
const { id } = req.params;
const video = await Video.findById(id);
if (!video) {
return res.render("404", { pageTitle: "Video not found" });
}
if (String(video.owner) !== _id) {
return res.status(403).redirect("/");
}
await Video.findByIdAndDelete(id);
const user = await User.findById(_id);
user.videos.splice(user.videos.indexOf(id), 1);
await user.save();
return res.redirect("/");
};
VIEWS apiRouter에 protectorMiddleware 추가
video player의 keydown 이벤트 switch 문에 case "M"(대문자) 추가