11/29 공부
Callback 함수 이용
export const home = (req, res) => {
Video.find({}, (error, videos) => {
console.log("error", error);
console.log("videos", videos);
});
console.log('hello');
return res.render("home", { pageTitle: "home", videos: [] });
};
-->
request page
cosole.log --> hello가 //제일 먼저 호출됨
render --> response looger( template ),
call back --> error ,videos순 callback은 특정코드를 마지막에 실행하게해줌
search가 끝난 후 render하기위해 기다림
장점: 추가적인 코드 없이 에러를 볼 수 있음
단점:함수안에 함수를 써야하는 번거러움이있음
에러코드 사용
export const home = (req, res) => {
Video.find({}, (error, videos) => {
if(error){
return res.render("server-error")
}
return res.render("home", {pageTitle:"home", videos})
});
---------------------------------------------------------------------------
Promise 함수 이용 최신버전
export const home = async (req, res) => {
console.log("i start")
const videos = await Video.find({});
console.log("i finished")
console.log(videos)
return res.render("home", { pageTitle: "Home", videos })
};
순서대로
i start
i finished
[]
render --> response looger( template ) 실행됨
await 을 find 앞에 쓰면 find는 callback필요없고(기다려서 작동하지않음) videos 찾아줌
에러는? --> try/catch문 이용
export const home = async (req, res) => {
try{
console.log("i start")
const videos = await Video.find({}); ///////////여기서 기다려
console.log("i finished")
console.log(videos)
return res.render("home", { pageTitle: "Home", videos })
}catch(error){
return res.render("server-error", {error});
}
};
await이 async(비동기) 인 함수 안에만 적용된다.
장점: 직관적임 callback함수와달리 어디를 기다리는지 직관적으로 알 수있음
1. return의 역할 : 본질적인 return의 역할보다는 function을 마무리짓는 역할로 사용되고 있음.
- 이러한 경우 return이 없어도 정상적으로 동작하지만 실수를 방지하기 위해 return을 사용
2. render한 것은 다시 render할 수 없음
- redirect(), sendStatus(), end() 등등 포함 (express에서 오류 발생)