Showing
5 changed files
with
71 additions
and
20 deletions
... | @@ -51,14 +51,47 @@ export const videoDetail = async(req, res) => { | ... | @@ -51,14 +51,47 @@ export const videoDetail = async(req, res) => { |
51 | } = req; | 51 | } = req; |
52 | try { | 52 | try { |
53 | const video = await Video.findById(id); | 53 | const video = await Video.findById(id); |
54 | - //console.log(video); | 54 | + res.render("videoDetail", { pageTitle: video.title, video }); |
55 | - res.render("videoDetail", { pageTitle: "Video Detail", video }); | ||
56 | } catch (error) { | 55 | } catch (error) { |
57 | - //console.log(error); | ||
58 | res.redirect(routes.home); | 56 | res.redirect(routes.home); |
59 | } | 57 | } |
60 | }; | 58 | }; |
61 | -export const editVideo = (req, res) => | ||
62 | - res.render("editVideo", { pageTitle: "Edit Video" }); | ||
63 | -export const deleteVideo = (req, res) => | ||
64 | - res.render("deleteVideo", { pageTitle: "Delete Video" }); | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
59 | +export const getEditVideo = async(req, res) => { | ||
60 | + const { | ||
61 | + params: { id }, | ||
62 | + } = req; | ||
63 | + try { | ||
64 | + const video = await Video.findById(id); | ||
65 | + //video를 받아서 render로 통해 템플릿으로 던져준다, | ||
66 | + res.render("editVideo", { pageTitle: `Edit ${video.title}`, video }); | ||
67 | + // rendering하는 순간 템플릿에선 video의 title과 description을 던져준다. | ||
68 | + } catch (error) { | ||
69 | + res.redirect(routes.home); | ||
70 | + } | ||
71 | +}; | ||
72 | +export const postEditVideo = async(req, res) => { | ||
73 | + const { | ||
74 | + params: { id }, | ||
75 | + body: { title, description }, | ||
76 | + } = req; | ||
77 | + try { | ||
78 | + //id를 찾아서 body를 얻어와야 한다. 비디오 수정에서 제목과 설명을 가져와야 하기 때문이다. | ||
79 | + //mongoose엔 우리의 id가 없어서 _id : id로 찾아줘야 한다. | ||
80 | + await Video.findOneAndUpdate({ _id: id }, { title, description }); //title:title == title | ||
81 | + //이렇게 하면 default로 얻어온 제목 및 내용을 수정하여 form을 전송하면 해당 내용으로 업데이트 된다. | ||
82 | + res.redirect(routes.videoDetail(id)); | ||
83 | + } catch (error) { | ||
84 | + res.redirect(routes.home); | ||
85 | + } | ||
86 | +}; | ||
87 | + | ||
88 | +export const deleteVideo = async(req, res) => { | ||
89 | + const { | ||
90 | + params: { id }, | ||
91 | + } = req; | ||
92 | + try { | ||
93 | + await Video.findOneAndRemove({ _id: id }); | ||
94 | + } catch (error) {} | ||
95 | + //삭제를 실패하던 성공하던 home으로 redirect한다. | ||
96 | + res.redirect(routes.home); | ||
97 | +}; | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -4,20 +4,26 @@ import { | ... | @@ -4,20 +4,26 @@ import { |
4 | getUpload, | 4 | getUpload, |
5 | postUpload, | 5 | postUpload, |
6 | videoDetail, | 6 | videoDetail, |
7 | - editVideo, | 7 | + getEditVideo, |
8 | + postEditVideo, | ||
8 | deleteVideo, | 9 | deleteVideo, |
9 | } from "../controllers/videoController"; | 10 | } from "../controllers/videoController"; |
10 | import { uploadVideo } from "../middlewares"; | 11 | import { uploadVideo } from "../middlewares"; |
11 | //export const videoRouter = express.Router(); 이렇게하면 이 변수만 export하게 된다. | 12 | //export const videoRouter = express.Router(); 이렇게하면 이 변수만 export하게 된다. |
12 | const videoRouter = express.Router(); | 13 | const videoRouter = express.Router(); |
13 | 14 | ||
15 | +//Upload | ||
14 | videoRouter.get(routes.upload, getUpload); | 16 | videoRouter.get(routes.upload, getUpload); |
15 | videoRouter.post(routes.upload, uploadVideo, postUpload); | 17 | videoRouter.post(routes.upload, uploadVideo, postUpload); |
16 | 18 | ||
17 | -videoRouter.get(routes.editVideo, editVideo); | 19 | +// Video Detail |
18 | - | ||
19 | videoRouter.get(routes.videoDetail(), videoDetail); | 20 | videoRouter.get(routes.videoDetail(), videoDetail); |
20 | 21 | ||
21 | -videoRouter.get(routes.deleteVideo, deleteVideo); | 22 | +// Video Edit |
23 | +videoRouter.get(routes.editVideo(), getEditVideo); | ||
24 | +videoRouter.post(routes.editVideo(), postEditVideo); | ||
25 | + | ||
26 | +// Video Delete | ||
27 | +videoRouter.get(routes.deleteVideo(), deleteVideo); | ||
22 | 28 | ||
23 | export default videoRouter; | 29 | export default videoRouter; |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -43,8 +43,20 @@ const routes = { | ... | @@ -43,8 +43,20 @@ const routes = { |
43 | return VIDEO_DETAIL; | 43 | return VIDEO_DETAIL; |
44 | } | 44 | } |
45 | }, | 45 | }, |
46 | - editVideo: EDIT_VIDEO, | 46 | + editVideo: (id) => { |
47 | - deleteVideo: DELETE_VIDEO, | 47 | + if (id) { |
48 | + return `/videos/${id}/edit`; | ||
49 | + } else { | ||
50 | + return EDIT_VIDEO; | ||
51 | + } | ||
52 | + }, | ||
53 | + deleteVideo: (id) => { | ||
54 | + if (id) { | ||
55 | + return `/videos/${id}/delete`; | ||
56 | + } else { | ||
57 | + return DELETE_VIDEO; | ||
58 | + } | ||
59 | + }, | ||
48 | }; | 60 | }; |
49 | 61 | ||
50 | export default routes; | 62 | export default routes; |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | extends layouts/main | 1 | extends layouts/main |
2 | 2 | ||
3 | block content | 3 | block content |
4 | -.form-container | 4 | + .form-container |
5 | - form(action=`/videos${routes.editVideo}`, method="post") | 5 | + form(action=routes.editVideo(video.id), method="post") |
6 | - input(type="text", placeholder="Title", name="title") | 6 | + input(type="text", placeholder="Title", name="title", value=video.title) |
7 | - textarea(name="description", placeholder="Description") | 7 | + textarea(name="description", placeholder="Description")=video.description |
8 | input(type="submit", value="Update Video") | 8 | input(type="submit", value="Update Video") |
9 | - a.form-container__link.form-container__link--delete(href=`/videos${routes.deleteVideo}`) Delete Video | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
9 | + a.form-container__link.form-container__link--delete(href=routes.deleteVideo(video.id)) Delete Video | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -4,7 +4,7 @@ block content | ... | @@ -4,7 +4,7 @@ block content |
4 | .video__player | 4 | .video__player |
5 | video(src=`/${video.fileUrl}`) | 5 | video(src=`/${video.fileUrl}`) |
6 | .video__info | 6 | .video__info |
7 | - a(href=routes.editVideo) Edit video | 7 | + a(href=routes.editVideo(video.id)) Edit video |
8 | h5.video__title=video.title | 8 | h5.video__title=video.title |
9 | span.video__views=video.views | 9 | span.video__views=video.views |
10 | - p.video__description=video.desription | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
10 | + p.video__description=video.description | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment