Flare-k

[Add] EsLint

1 +module.exports = {
2 + env: {
3 + browser: true,
4 + commonjs: true,
5 + es2020: true,
6 + },
7 + extends: ["airbnb-base", "plugin:prettier/recommended"],
8 + rules: {
9 + "no-console": "off",
10 + },
11 + parserOptions: {
12 + ecmaVersion: 11,
13 + },
14 + rules: {},
15 +};
...@@ -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 }
......