Showing
6 changed files
with
43 additions
and
1 deletions
... | @@ -13,6 +13,7 @@ import routes from "./routes"; | ... | @@ -13,6 +13,7 @@ import routes from "./routes"; |
13 | import userRouter from "./routers/userRouter"; | 13 | import userRouter from "./routers/userRouter"; |
14 | import videoRouter from "./routers/videoRouter"; | 14 | import videoRouter from "./routers/videoRouter"; |
15 | import globalRouter from "./routers/globalRouter"; | 15 | import globalRouter from "./routers/globalRouter"; |
16 | +import aipRouter from "./routers/apiRouter"; | ||
16 | import "./passport"; | 17 | import "./passport"; |
17 | 18 | ||
18 | dotenv.config(); | 19 | dotenv.config(); |
... | @@ -45,5 +46,5 @@ app.use(localsMiddleware); | ... | @@ -45,5 +46,5 @@ app.use(localsMiddleware); |
45 | app.use(routes.home, globalRouter); | 46 | app.use(routes.home, globalRouter); |
46 | app.use(routes.users, userRouter); | 47 | app.use(routes.users, userRouter); |
47 | app.use(routes.videos, videoRouter); | 48 | app.use(routes.videos, videoRouter); |
48 | - | 49 | +app.use(routes.api, aipRouter); |
49 | export default app; // 파일을 불러올때 app object를 준다는 의미. | 50 | export default app; // 파일을 불러올때 app object를 준다는 의미. | ... | ... |
... | @@ -7,6 +7,12 @@ const currentTime = document.getElementById("currentTime"); | ... | @@ -7,6 +7,12 @@ const currentTime = document.getElementById("currentTime"); |
7 | const totalTime = document.getElementById("totalTime"); | 7 | const totalTime = document.getElementById("totalTime"); |
8 | const volumeRange = document.getElementById("jsVolume"); | 8 | const volumeRange = document.getElementById("jsVolume"); |
9 | 9 | ||
10 | +const registerView = () => { | ||
11 | + fetch(`/api/${window.location.href.split("/videos/")[1]}/view`, { | ||
12 | + method: "POST", | ||
13 | + }); | ||
14 | +}; | ||
15 | + | ||
10 | // video element MDN | 16 | // video element MDN |
11 | // using MDN (Mozila Developer Networks) | 17 | // using MDN (Mozila Developer Networks) |
12 | function handlePlayClick() { | 18 | function handlePlayClick() { |
... | @@ -90,6 +96,7 @@ function setTotalTime() { | ... | @@ -90,6 +96,7 @@ function setTotalTime() { |
90 | 96 | ||
91 | // 영상이 끝나면 pause하고 다시 앞으로 돌릴 수 있게 하고 싶다... | 97 | // 영상이 끝나면 pause하고 다시 앞으로 돌릴 수 있게 하고 싶다... |
92 | function handleEnded() { | 98 | function handleEnded() { |
99 | + registerView(); | ||
93 | videoPlayer.currentTime = 0; | 100 | videoPlayer.currentTime = 0; |
94 | playBtn.innerHTML = '<i class="fas fa-play"></i>'; | 101 | playBtn.innerHTML = '<i class="fas fa-play"></i>'; |
95 | } | 102 | } | ... | ... |
... | @@ -119,3 +119,20 @@ export const deleteVideo = async (req, res) => { | ... | @@ -119,3 +119,20 @@ export const deleteVideo = async (req, res) => { |
119 | // 삭제를 실패하던 성공하던 home으로 redirect한다. | 119 | // 삭제를 실패하던 성공하던 home으로 redirect한다. |
120 | res.redirect(routes.home); | 120 | res.redirect(routes.home); |
121 | }; | 121 | }; |
122 | + | ||
123 | +// 조회수 부분 | ||
124 | +export const postRegisterView = async (req, res) => { | ||
125 | + const { | ||
126 | + params: { id }, | ||
127 | + } = req; | ||
128 | + try { | ||
129 | + const video = await Video.findById(id); | ||
130 | + video.views += 1; | ||
131 | + video.save(); | ||
132 | + res.status(200); | ||
133 | + } catch (error) { | ||
134 | + res.status(400); | ||
135 | + } finally { | ||
136 | + res.end(); | ||
137 | + } | ||
138 | +}; | ... | ... |
... | @@ -21,6 +21,7 @@ | ... | @@ -21,6 +21,7 @@ |
21 | "@babel/polyfill": "^7.10.1", | 21 | "@babel/polyfill": "^7.10.1", |
22 | "@babel/preset-env": "^7.9.6", | 22 | "@babel/preset-env": "^7.9.6", |
23 | "autoprefixer": "^9.8.0", | 23 | "autoprefixer": "^9.8.0", |
24 | + "axios": "^0.19.2", | ||
24 | "babel-loader": "^8.1.0", | 25 | "babel-loader": "^8.1.0", |
25 | "body-parser": "^1.19.0", | 26 | "body-parser": "^1.19.0", |
26 | "connect-mongo": "^3.2.0", | 27 | "connect-mongo": "^3.2.0", | ... | ... |
routers/apiRouter.js
0 → 100644
... | @@ -27,6 +27,10 @@ const GITHUB_CALLBACK = "/auth/github/callback"; | ... | @@ -27,6 +27,10 @@ const GITHUB_CALLBACK = "/auth/github/callback"; |
27 | const FB = "/auth/facebook"; | 27 | const FB = "/auth/facebook"; |
28 | const FB_CALLBACK = "/auth/facebook/callback"; | 28 | const FB_CALLBACK = "/auth/facebook/callback"; |
29 | 29 | ||
30 | +// API | ||
31 | +const API = "/api"; | ||
32 | +const REGISTER_VIEW = "/:id/view"; | ||
33 | + | ||
30 | const routes = { | 34 | const routes = { |
31 | home: HOME, | 35 | home: HOME, |
32 | join: JOIN, | 36 | join: JOIN, |
... | @@ -71,6 +75,9 @@ const routes = { | ... | @@ -71,6 +75,9 @@ const routes = { |
71 | me: ME, | 75 | me: ME, |
72 | facebook: FB, | 76 | facebook: FB, |
73 | facebookCallback: FB_CALLBACK, | 77 | facebookCallback: FB_CALLBACK, |
78 | + | ||
79 | + api: API, | ||
80 | + registerView: REGISTER_VIEW, | ||
74 | }; | 81 | }; |
75 | // template에서 직접 접근이 필요한 경우 함수로 바꿔준다. | 82 | // template에서 직접 접근이 필요한 경우 함수로 바꿔준다. |
76 | export default routes; | 83 | export default routes; | ... | ... |
-
Please register or login to post a comment