Our First Query
init.js 를 만들어주자. 이 파일은 모든 걸 초기화(initialize) 시켜줄 것이다.
이 파일이 database 와 video를 import 해주고, 우리 application 을 작동시킬 것이다!
server.js의 내용을 옮기고, app도 export 해서 init.js 에 import 해준다.
// init.js
import "./db";
import "./models/Video";
import app from "./server";
const PORT = 4000;
const handleListening = () =>
console.log(`✅ Server listening on port http://localhost:${PORT} 🚀`);
app.listen(PORT, handleListening);
오류가 나니 package.json 에서 server를 init 으로 바꿔주고,
videoController로 와서 가짜 데이터를 지워준다.
그렇다면 이제 video mode을 어떻게 사용할까?! 에 대해서 알아보자.
callback 과 promise
callback: 무언가가 발생하고 난 다음 호출되는 function
- javascript 에서 기다림을 표현하는 하나의 방법
// init.js 아래 내용 중 listen === callback
app.listen(PORT, handleListening);
configuration (POST) 이랑 호출할 function (handleListening) 이 필요함
videoController 중 Video.find()에 configuration을 넣어준다.
이때 { } 즉 중괄호는 search terms 를 나타내는데, search terms가 비어 있으면 모든 형식을 찾는다는 뜻이다.
그리고 다음 단계가 callback 을 전송하는 것이다. callback 은 err 와 docs 라는 signature 를 가진다.
// videoController.js
import { reset } from "nodemon";
import Video from "../models/Video";
export const home = (req, res) => {
Video.find({}, (error, videos) => {} );
return res.render("home", { pageTitle: "Home" });
};
callback 이 좋은 점은, 코드에 따라 실행되는 시간이 다를 수가 있다는 것이다.
아래에서 start -> I finish first -> finished 의 순서대로 실행된다는 점 주의!!
export const home = (req, res) => {
console.log("Start");
Video.find({}, (error, videos) => {
console.log("Finished");
return res.render("home", { pageTitle: "Home", videos });
});
};
console.log("I finish first");
promise: callback처럼 함수 안에 함수를 쓰는 장황한 코드 없이, 간결하게 쓸 수 있다.
- callback 의 최신 버전
- await 을 find 앞에 작성하면 callback 이 필요없다는 점을 알아채고, find는 찾아낸 비디오를 바로 출력해준다.
- 에러는 try / catch 로 작성. try해보고, 에러가 있다면 catch 하기.
함수 안에 또 함수를 넣으면 반영되지 않는다.
document 만들기
이렇게 만들면 양식에 맞지 않는(string 적는 데에 숫자 적는다거나..) 경우에
올바르지 않은 데이터는 document 에 기록될 수 없게 해준다.
// videoController.js
export const postUpload = (req, res) => {
const { title, description, hashtags } = req.body;
const video = new Video({
title: title,
description: description,
createdAt: Date.now(),
hashtags: hashtags.split(",").map((word) => `#${word}`),
meta: {
views: 0,
rating: 0,
},
});
console.log(video);
return res.redirect("/");
};
'Study > Youtube Clone' 카테고리의 다른 글
[유튜브클론] Webpack 입문하기! (feat. SCSS) (0) | 2022.08.30 |
---|---|
[유튜브 클론] Mongo DB를 시작해보자! (0) | 2022.08.19 |
[유튜브 클론] Array Database, Edit Video (0) | 2022.08.18 |
[유튜브 클론] Routers (0) | 2022.08.14 |
[유튜브클론] External Middlewares: Morgan (0) | 2022.08.12 |