Showing
4 changed files
with
58 additions
and
34 deletions
.eslintrc.js
0 → 100644
... | @@ -7,20 +7,21 @@ | ... | @@ -7,20 +7,21 @@ |
7 | - Node.js를 이용하여 나만의 Youtube 사이트를 제작한다. | 7 | - Node.js를 이용하여 나만의 Youtube 사이트를 제작한다. |
8 | 8 | ||
9 | ## 기술 Stack | 9 | ## 기술 Stack |
10 | + | ||
10 | 1. Frontend: Vanilla.js | 11 | 1. Frontend: Vanilla.js |
11 | 2. Backend : Node.js | 12 | 2. Backend : Node.js |
12 | 3. Database: mongoDB | 13 | 3. Database: mongoDB |
13 | 4. A W S : EC2 | 14 | 4. A W S : EC2 |
14 | 15 | ||
15 | - | ||
16 | ## Pages: | 16 | ## Pages: |
17 | + | ||
17 | - [ ] Home | 18 | - [ ] Home |
18 | -- [ ] Join | 19 | +- [x] Join |
19 | -- [ ] Login | 20 | +- [x] Login |
20 | - [x] Search | 21 | - [x] Search |
21 | - [ ] User Detail | 22 | - [ ] User Detail |
22 | -- [ ] Edit Profile | 23 | +- [x] Edit Profile |
23 | -- [ ] Change Password | 24 | +- [x] Change Password |
24 | -- [ ] Upload | 25 | +- [x] Upload |
25 | - [ ] Video Detail | 26 | - [ ] Video Detail |
26 | -- [ ] Edit Video | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
27 | +- [x] Edit Video | ... | ... |
1 | import routes from "../routes"; | 1 | import routes from "../routes"; |
2 | import Video from "../models/Video"; | 2 | import Video from "../models/Video"; |
3 | 3 | ||
4 | -//db를 import 해주고 home에 async를 달아준다. async는 기다려주는 역할을 한다. | 4 | +// db를 import 해주고 home에 async를 달아준다. async는 기다려주는 역할을 한다. |
5 | -//javascript가 db를 다 못보고 그냥 지나갈 수도 있기 때문이다. | 5 | +// javascript가 db를 다 못보고 그냥 지나갈 수도 있기 때문이다. |
6 | -//javascript는 기본적으로 기다려주지 않는다. | 6 | +// javascript는 기본적으로 기다려주지 않는다. |
7 | -//async: "JS야 이 function의 ~~부분은 꼭 기다려!" await이 있는 부분까지 기다린다. | 7 | +// async: "JS야 이 function의 ~~부분은 꼭 기다려!" await이 있는 부분까지 기다린다. |
8 | -export const home = async(req, res) => { | 8 | +export const home = async (req, res) => { |
9 | try { | 9 | try { |
10 | - const videos = await Video.find({}); //모든 비디오를 가져온다. | 10 | + const videos = await Video.find({}).sort({ _id: -1 }); // 모든 비디오를 가져온다. |
11 | - res.render("home", { pageTitle: "Home", videos }); //render DB에 저장된 video의 내용을 보여준다 | 11 | + res.render("home", { pageTitle: "Home", videos }); // render DB에 저장된 video의 내용을 보여준다 |
12 | } catch (error) { | 12 | } catch (error) { |
13 | console.log(error); | 13 | console.log(error); |
14 | res.render("home", { pageTitle: "Home", videos: [] }); | 14 | res.render("home", { pageTitle: "Home", videos: [] }); |
... | @@ -22,30 +22,30 @@ export const search = (req, res) => { | ... | @@ -22,30 +22,30 @@ export const search = (req, res) => { |
22 | res.render("search", { pageTitle: "Search", searchingBy, videos }); | 22 | res.render("search", { pageTitle: "Search", searchingBy, videos }); |
23 | }; | 23 | }; |
24 | 24 | ||
25 | -//upload 또한 upload를 준비하기 위한 get 페이지와 실제 데이터를 보내는 post 페이지가 필요하다. | 25 | +// upload 또한 upload를 준비하기 위한 get 페이지와 실제 데이터를 보내는 post 페이지가 필요하다. |
26 | export const getUpload = (req, res) => | 26 | export const getUpload = (req, res) => |
27 | res.render("upload", { pageTitle: "Upload" }); | 27 | res.render("upload", { pageTitle: "Upload" }); |
28 | -export const postUpload = async(req, res) => { | 28 | +export const postUpload = async (req, res) => { |
29 | - //const {} 를 통해 body를 받아와 요청하는 정보들을 확인한다. | 29 | + // const {} 를 통해 body를 받아와 요청하는 정보들을 확인한다. |
30 | - //이는 pug와 db.js를 확인해야하는 듯 하다. | 30 | + // 이는 pug와 db.js를 확인해야하는 듯 하다. |
31 | const { | 31 | const { |
32 | body: { title, description }, | 32 | body: { title, description }, |
33 | file: { path }, | 33 | file: { path }, |
34 | - } = req; //file에 path라는 요소가 있다. | 34 | + } = req; // file에 path라는 요소가 있다. |
35 | 35 | ||
36 | const newVideo = await Video.create({ | 36 | const newVideo = await Video.create({ |
37 | fileUrl: path, | 37 | fileUrl: path, |
38 | title, | 38 | title, |
39 | description, | 39 | description, |
40 | - //여기있는 fileUrl, title, description은 videoDB의 속성이다. | 40 | + // 여기있는 fileUrl, title, description은 videoDB의 속성이다. |
41 | }); | 41 | }); |
42 | console.log(newVideo); | 42 | console.log(newVideo); |
43 | - res.redirect(routes.videoDetail(newVideo.id)); //id는 DB의 id | 43 | + res.redirect(routes.videoDetail(newVideo.id)); // id는 DB의 id |
44 | - //id는 mongoDB가 랜덤하게 만들어준다. | 44 | + // id는 mongoDB가 랜덤하게 만들어준다. |
45 | }; | 45 | }; |
46 | 46 | ||
47 | -export const videoDetail = async(req, res) => { | 47 | +export const videoDetail = async (req, res) => { |
48 | - //console.log(req.params); params에 id가 있다는걸 알게 됨 | 48 | + // console.log(req.params); params에 id가 있다는걸 알게 됨 |
49 | const { | 49 | const { |
50 | params: { id }, | 50 | params: { id }, |
51 | } = req; | 51 | } = req; |
... | @@ -56,42 +56,44 @@ export const videoDetail = async(req, res) => { | ... | @@ -56,42 +56,44 @@ export const videoDetail = async(req, res) => { |
56 | res.redirect(routes.home); | 56 | res.redirect(routes.home); |
57 | } | 57 | } |
58 | }; | 58 | }; |
59 | -export const getEditVideo = async(req, res) => { | 59 | +export const getEditVideo = async (req, res) => { |
60 | const { | 60 | const { |
61 | params: { id }, | 61 | params: { id }, |
62 | } = req; | 62 | } = req; |
63 | try { | 63 | try { |
64 | const video = await Video.findById(id); | 64 | const video = await Video.findById(id); |
65 | - //video를 받아서 render로 통해 템플릿으로 던져준다, | 65 | + // video를 받아서 render로 통해 템플릿으로 던져준다, |
66 | res.render("editVideo", { pageTitle: `Edit ${video.title}`, video }); | 66 | res.render("editVideo", { pageTitle: `Edit ${video.title}`, video }); |
67 | // rendering하는 순간 템플릿에선 video의 title과 description을 던져준다. | 67 | // rendering하는 순간 템플릿에선 video의 title과 description을 던져준다. |
68 | } catch (error) { | 68 | } catch (error) { |
69 | res.redirect(routes.home); | 69 | res.redirect(routes.home); |
70 | } | 70 | } |
71 | }; | 71 | }; |
72 | -export const postEditVideo = async(req, res) => { | 72 | +export const postEditVideo = async (req, res) => { |
73 | const { | 73 | const { |
74 | params: { id }, | 74 | params: { id }, |
75 | body: { title, description }, | 75 | body: { title, description }, |
76 | } = req; | 76 | } = req; |
77 | try { | 77 | try { |
78 | - //id를 찾아서 body를 얻어와야 한다. 비디오 수정에서 제목과 설명을 가져와야 하기 때문이다. | 78 | + // id를 찾아서 body를 얻어와야 한다. 비디오 수정에서 제목과 설명을 가져와야 하기 때문이다. |
79 | - //mongoose엔 우리의 id가 없어서 _id : id로 찾아줘야 한다. | 79 | + // mongoose엔 우리의 id가 없어서 _id : id로 찾아줘야 한다. |
80 | await Video.findOneAndUpdate({ _id: id }, { title, description }); //title:title == title | 80 | await Video.findOneAndUpdate({ _id: id }, { title, description }); //title:title == title |
81 | - //이렇게 하면 default로 얻어온 제목 및 내용을 수정하여 form을 전송하면 해당 내용으로 업데이트 된다. | 81 | + // 이렇게 하면 default로 얻어온 제목 및 내용을 수정하여 form을 전송하면 해당 내용으로 업데이트 된다. |
82 | res.redirect(routes.videoDetail(id)); | 82 | res.redirect(routes.videoDetail(id)); |
83 | } catch (error) { | 83 | } catch (error) { |
84 | res.redirect(routes.home); | 84 | res.redirect(routes.home); |
85 | } | 85 | } |
86 | }; | 86 | }; |
87 | 87 | ||
88 | -export const deleteVideo = async(req, res) => { | 88 | +export const deleteVideo = async (req, res) => { |
89 | const { | 89 | const { |
90 | params: { id }, | 90 | params: { id }, |
91 | } = req; | 91 | } = req; |
92 | try { | 92 | try { |
93 | await Video.findOneAndRemove({ _id: id }); | 93 | await Video.findOneAndRemove({ _id: id }); |
94 | - } catch (error) {} | 94 | + } catch (error) { |
95 | - //삭제를 실패하던 성공하던 home으로 redirect한다. | 95 | + console.log(error); |
96 | + } | ||
97 | + // 삭제를 실패하던 성공하던 home으로 redirect한다. | ||
96 | res.redirect(routes.home); | 98 | res.redirect(routes.home); |
97 | }; | 99 | }; | ... | ... |
... | @@ -27,6 +27,12 @@ | ... | @@ -27,6 +27,12 @@ |
27 | "pug": "^2.0.4" | 27 | "pug": "^2.0.4" |
28 | }, | 28 | }, |
29 | "devDependencies": { | 29 | "devDependencies": { |
30 | - "nodemon": "^2.0.4" | 30 | + "eslint": "^6.8.0", |
31 | + "eslint-config-airbnb-base": "^14.1.0", | ||
32 | + "eslint-config-prettier": "^6.11.0", | ||
33 | + "eslint-plugin-import": "^2.21.1", | ||
34 | + "eslint-plugin-prettier": "^3.1.3", | ||
35 | + "nodemon": "^2.0.4", | ||
36 | + "prettier": "^2.0.5" | ||
31 | } | 37 | } |
32 | } | 38 | } | ... | ... |
-
Please register or login to post a comment