안녕하세요!
6.15 리트윗 API 만들기에서 백엔드 라우터 post.js에서 중복되어 나오는
const post = await db.Post.findOne({where:{id:req.params.id}});
if(!post){
return res.status(404).send('존재하지 않는 포스트입니다.');
}
해당 코드를 미들웨어로 만들어 연결해보라는 숙제를 내주셔서 해보았습니다!
제대로 동작은 되는데 제가 한 방식이 옳은 방식인지 모르겠어서 체크해주셨으면 하는 마음에 글을 올립니다.
back/routes/middleware.js 에서 새로 작성한 postExists 부분
const db = require('../models');
exports.postExists = async(req, res, next)=>{
try{
const post = await db.Post.findOne({where:{id:req.params.id}});
if(!post){
return res.status(404).send('존재하지 않는 포스트입니다.');
}
req.post = post;
next();
}catch(e){
console.error(e);
return next(e);
}
}
back/routes/post.js에서 postExists를 불러와 사용하는 부분 (다른 부분도 같은 방식으로 했기 때문에 like 부분만 적겠습니다!)
const {isLoggedIn, postExists} = require('./middleware');
router.post('/:id/like', isLoggedIn, postExists, async(req, res, next)=>{
try{
const post = req.post;
await post.addLiker(req.user.id);
res.json({userId: req.user.id});
}catch(e){
console.error(e);
next(e);
}
});
post 가 넘어가지 않아 req.post로 해당 데이터를 넘겨서 post.js에서 다시 선언한 후 이를 사용하였는데요.
구글 검색결과를 참고하여 저런 방식으로 하였는데, res를 통해 넘기는 것이 아닌 req에 넣어주는 것이 맞는건가요?
조언해주시면 감사하겠습니다!