-
카테고리
-
세부 분야
풀스택
-
해결 여부
해결됨
async await
19.11.08 12:26 작성 조회수 175
0
routes/page.js 파일에서
//메인페이지
router.get('/', (req, res, next) => {
Post.findAll({
include: {
model: User,
attributes: ['id', 'nick'],
},
order: [['createdAt', 'DESC']],
})
.then( (posts) => {
res.render('main', {
title: 'NodeBird',
twits: posts,
user: req.user,
loginError: req.flash('loginError'),
});
})
.catch ( (error) => {
console.error(error);
next(error);
});
});
이부분을 async로 바꾸고 싶어서..
router.get('/', async (req, res, next) => {
try {
const posts = await Post.findAll({
include: {
model: User,
attributes: ['id', 'nick'],
},
order: [['createdAt', 'DESC']],
});
res.render('main', {
title: 'Nodebird',
twits: posts,
user: req.user,
loginError: req.flash('loginError'),
});
} catch (err) {
console.error(err);
next(err);
}
});
이렇게 했는데...맞게 바꾼건가요?
await가 붙으면 작업이 끝날 때까지 기다린다는 의미라서 posts에 값이 담길 때까지 기다리고
담긴 후에 render가 실행된다는 의미 맞을까요?
제가 비동기 부분에 대한 이해가 좀 부족한것 같네요 ㅠㅠ
===========================================
아, 그리고 추가적으로
routes/post.js 에서
router.get('/hashtag', async (req, res, next) => {
const query = req.query.hashtag; //사용자가 검색하고자 하는 것
if (!query) { //아무것도 입력 안하면
return res.redirect('/');//기본페이지로
}
try {
const hashtag = await Hashtag.findOne( { where: { title: query }});
let posts = [];
if (hashtag) {//찾은 것이 있으면
posts = await hashtag.getPosts({ include: [{ model: User }]});//다대다관계 가져오면서, 사용자까지 넣어서 가져옴
}
return res.render('main', {
title: `${query} | NodeBird`,
user: req.user,
twits: posts,
});
} catch (error) {
console.error(error);
next(error);
}
});
마지막에 render하시면서 return을 붙이시던데, 특별한 이유가 있으신건가요?
답변을 작성해보세요.
0
조현영
지식공유자2019.11.08
맞게 바꾸셨습니다.
await을 할 때는 if문을 자주 쓰게 돼서 가끔씩 res.render이나 res.json이 한 라우터에 여러 번 등장하게 됩니다. 그 때 return 안 붙여주면 에러가 나게 되는데, 어떠한 경우에도 에러나지 않도록 습관을 들인 겁니다.
답변 1