router.get('/followers',isLoggedIn,async(req,res,next)=>{try {//조회 요청을 보낸 즉, 로그인된 유저 정보를 먼저 찾는다. constuser=awaitUser.findOne({where:{id:req.user.id}});if(!user){returnres.status(403).send('없는 유저')};//있다면 Sequelize관계메소드를 이용해 목록을 가져온다. constfollowers=awaituser.getFollowers();//결과물을 전송한다.res.status(200).json(followers); } catch (e) {console.error(e);next(e); }})
프로필 팔로잉 가져오기
방법은 팔로워와 동일합니다.
관계태이블에 as를 통해 Followings/ Followes로 구분했기 때문에 이번에는 Followings를 가져오면 됩니다.
이번에는 추가적으로 가져올 Following의 유저데이터를 좀 커스텀 해주겠습니다.
router.get('/followings',isLoggedIn,async(req,res,next)=>{try {//조회 요청을 보낸 즉, 로그인된 유저 정보를 먼저 찾는다. constuser=awaitUser.findOne({where: {id:req.user.id}});if(!user){returnres.statud(404).send('없는유저입니다.')};//있다면 Sequelize관계메소드를 이용해 목록을 가져온다. constfollowings=user.getFollowings({ model:User, attributes:['id','nickname'], });//커스텀은 데이터들을 보내준다. res.status(200).json(followings); } catch (e) {console.error(e);next(e); }})
header에는 '팔로잉' / '팔로우' 두가지 property중 하나가 이용되기 때문에 그를 이용한 조건을 걸어주었습니다.
만약 내가 상대방을 팔로우한 팔로잉이 아니면 나를 팔로우한 상대방에게서 지우는 기능을 구현합니다.
컴포넌트렌더링에서는 다음과 같이 해줍니다.
{/*반복문 안에서 온클릭같은게 있다면 반복문에 대한 데이터를 넘겨줄때가 있는데 이때 고차함수 유용 */}<Cardactions={[ <StopOutlinedkey="stop"onClick={() =>onCancel(item.id)} />,//onClick={onCencel(item.id)}이렇게 하고, const onCencel=(id)=>()=>{}이렇게도 가능 ]}>
// 여기서 받아올 URI parameter의 id는 상대방의 id입니다. // 상대방 유저를 조회해 그중 상대방이 팔로우한 목록에서 로그인한 유저를 지워야 하기 때문입니다.router.delete('follower/:id',isLoggedIn,async(req,res,next)=>{try {//상대방 User조회constuser=awaitUser.findOne({where:{id:req.params.id}});//상대방이 없다면 에러if(!user){returnres.status(403).send('상대방 유저가 없습니다.')};//상대방입장에서 나를 팔로잉한것이기 때문에 following중 나를 삭제awaituser.removeFollowing(req.user.id);//리덕스 상태에서 상대방 아이디를 filter해주기 위해 보내준다.res.status(200).json({id:parseInt(req.params.id,10)}); } catch (e) {console.error(e);next(e); }});
생각보다 복잡하지는 않지만 router가 많아지면 많아질수록 뭔가 햇갈리는 부분들이 많아집니다.