Showing
4 changed files
with
41 additions
and
4 deletions
1 | /* eslint-disable no-console */ | 1 | /* eslint-disable no-console */ |
2 | import routes from "../routes"; | 2 | import routes from "../routes"; |
3 | import Video from "../models/Video"; | 3 | import Video from "../models/Video"; |
4 | +import Comment from "../models/Comment"; | ||
4 | 5 | ||
5 | // db를 import 해주고 home에 async를 달아준다. async는 기다려주는 역할을 한다. | 6 | // db를 import 해주고 home에 async를 달아준다. async는 기다려주는 역할을 한다. |
6 | // javascript가 db를 다 못보고 그냥 지나갈 수도 있기 때문이다. | 7 | // javascript가 db를 다 못보고 그냥 지나갈 수도 있기 때문이다. |
... | @@ -62,7 +63,9 @@ export const videoDetail = async (req, res) => { | ... | @@ -62,7 +63,9 @@ export const videoDetail = async (req, res) => { |
62 | params: { id }, | 63 | params: { id }, |
63 | } = req; | 64 | } = req; |
64 | try { | 65 | try { |
65 | - const video = await Video.findById(id).populate("creator"); | 66 | + const video = await Video.findById(id) |
67 | + .populate("creator") | ||
68 | + .populate("comments"); | ||
66 | res.render("videoDetail", { pageTitle: video.title, video }); | 69 | res.render("videoDetail", { pageTitle: video.title, video }); |
67 | } catch (error) { | 70 | } catch (error) { |
68 | res.redirect(routes.home); | 71 | res.redirect(routes.home); |
... | @@ -136,3 +139,25 @@ export const postRegisterView = async (req, res) => { | ... | @@ -136,3 +139,25 @@ export const postRegisterView = async (req, res) => { |
136 | res.end(); | 139 | res.end(); |
137 | } | 140 | } |
138 | }; | 141 | }; |
142 | + | ||
143 | +// 댓글 부분 | ||
144 | +export const postAddComment = async (req, res) => { | ||
145 | + const { | ||
146 | + params: { id }, // URL에서 가져옴 | ||
147 | + body: { comment }, | ||
148 | + user, | ||
149 | + } = req; | ||
150 | + try { | ||
151 | + const video = await Video.findById(id); | ||
152 | + const newComment = await Comment.create({ | ||
153 | + text: comment, | ||
154 | + creator: user.id, | ||
155 | + }); | ||
156 | + video.comments.push(newComment.id); | ||
157 | + video.save(); | ||
158 | + } catch (error) { | ||
159 | + res.status(400); | ||
160 | + } finally { | ||
161 | + res.end(); | ||
162 | + } | ||
163 | +}; | ... | ... |
1 | import express from "express"; | 1 | import express from "express"; |
2 | import routes from "../routes"; | 2 | import routes from "../routes"; |
3 | -import { postRegisterView } from "../controllers/videoController"; | 3 | +import { |
4 | + postRegisterView, | ||
5 | + postAddComment, | ||
6 | +} from "../controllers/videoController"; | ||
4 | 7 | ||
5 | const apiRouter = express.Router(); | 8 | const apiRouter = express.Router(); |
6 | 9 | ||
7 | apiRouter.post(routes.registerView, postRegisterView); | 10 | apiRouter.post(routes.registerView, postRegisterView); |
8 | - | 11 | +apiRouter.post(routes.addComment, postAddComment); |
9 | export default apiRouter; | 12 | export default apiRouter; | ... | ... |
... | @@ -31,6 +31,9 @@ const FB_CALLBACK = "/auth/facebook/callback"; | ... | @@ -31,6 +31,9 @@ const FB_CALLBACK = "/auth/facebook/callback"; |
31 | const API = "/api"; | 31 | const API = "/api"; |
32 | const REGISTER_VIEW = "/:id/view"; | 32 | const REGISTER_VIEW = "/:id/view"; |
33 | 33 | ||
34 | +// Comment | ||
35 | +const ADD_COMMENT = "/:id/comment"; | ||
36 | + | ||
34 | const routes = { | 37 | const routes = { |
35 | home: HOME, | 38 | home: HOME, |
36 | join: JOIN, | 39 | join: JOIN, |
... | @@ -78,6 +81,7 @@ const routes = { | ... | @@ -78,6 +81,7 @@ const routes = { |
78 | 81 | ||
79 | api: API, | 82 | api: API, |
80 | registerView: REGISTER_VIEW, | 83 | registerView: REGISTER_VIEW, |
84 | + addComment: ADD_COMMENT, | ||
81 | }; | 85 | }; |
82 | // template에서 직접 접근이 필요한 경우 함수로 바꿔준다. | 86 | // template에서 직접 접근이 필요한 경우 함수로 바꿔준다. |
83 | export default routes; | 87 | export default routes; | ... | ... |
... | @@ -23,4 +23,9 @@ block content | ... | @@ -23,4 +23,9 @@ block content |
23 | if video.comments.length === 1 | 23 | if video.comments.length === 1 |
24 | span.video__comment-number 1 comment | 24 | span.video__comment-number 1 comment |
25 | else | 25 | else |
26 | - span.video__comment-number #{video.comments.length} comments | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
26 | + span.video__comment-number #{video.comments.length} comments | ||
27 | + form.add__comment#jsAddComment | ||
28 | + input(type="text", placeholder="Add a comment", name="comment") | ||
29 | + ul.video__comments-list | ||
30 | + each comment in video.comments | ||
31 | + span comment.text | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment