강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

장산님의 프로필 이미지
장산

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

팔로우 / 언팔로우

팔로우,언팔로우 강의

해결된 질문

작성

·

779

0

음 어디를 봐야할지 잘몰라서 글을 남깁니다 ㅠㅠ

팔로우를 누르고 프로필을 넘어가면서

다른 사람을 팔로우 했다가 자신을 팔로우 한것으로 바뀌네요 ㅠㅠ 그래서 팔로우하고 프로필 페이지로 넘어가면 팔로잉 목록하고 팔로워 목록에 자신 닉넴임이 둘다 뜹니다 ㅠㅠ

일단 팔로우는 다른 사람 팔로우 했다고 정상적으로 뜹니다

스크린샷 2023-04-12 오전 12.38.18.png

스크린샷 2023-04-12 오전 12.36.07.png스크린샷 2023-04-12 오전 12.36.31.png

 

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

이건 프론트서버에서 백엔드 서버로 요청을 잘못 보냈거나, 백엔드쪽에서 sequelize를 헷갈려서 잘못 구현했을 확률이 높습니다. 아니면 목록을 불러오는 걸 잘못했을 수도 있고요.

일단 DB쪽에 데이터가 어떻게 들어갔는지부터 보는 게 좋습니다. 화면은 잘못 구현되더라도 DB에 데이터는 정확하게 쌓이도록 해야 합니다.

장산님의 프로필 이미지
장산
질문자

죄송합니다 ㅠㅠ 아직까지 해결책을 못찾고있습니다

router.patch("/:userId/follow", isLoggedIn, async (req, res, next) => {
  // PATCH /user/1/follow
  try {
    const user = await User.findOne({ where: { id: req.params.userId } });
    if (!user) {
      res.status(403).send("없는 사람을 팔로우하려고 하시네요?");
    }
    await user.addFollowers(req.user.id);
    res.status(200).json({ userId: parseInt(req.params.userId, 10) });
  } catch (error) {
    console.error(error);
    next(error);
  }
});

router.delete("/:userId/follow", isLoggedIn, async (req, res, next) => {
  // DELETE /user/1/follow
  try {
    const user = await User.findOne({ where: { id: req.params.userId } });
    if (!user) {
      res.status(403).send("없는 사람을 언팔로우하려고 하시네요?");
    }
    await user.removeFollowers(req.user.id);
    res.status(200).json({ userId: parseInt(req.params.userId, 10) });
  } catch (error) {
    console.error(error);
    next(error);
  }
});

router.delete("/follower/:userId", isLoggedIn, async (req, res, next) => {
  // DELETE /user/follower/2
  try {
    const user = await User.findOne({ where: { id: req.params.userId } });
    if (!user) {
      res.status(403).send("없는 사람을 차단하려고 하시네요?");
    }
    await user.removeFollowings(req.user.id);
    res.status(200).json({ userId: parseInt(req.params.userId, 10) });
  } catch (error) {
    console.error(error);
    next(error);
  }
});

router.get("/followers", isLoggedIn, async (req, res, next) => {
  // GET /user/followers
  try {
    const user = await User.findOne({ where: { id: req.user.id } });
    if (!user) {
      res.status(403).send("없는 사람을 찾으려고 하시네요?");
    }
    const followers = await user.getFollowers();
    res.status(200).json(followers);
  } catch (error) {
    console.error(error);
    next(error);
  }
});

router.get("/followings", isLoggedIn, async (req, res, next) => {
  // GET /user/followings
  try {
    const user = await User.findOne({ where: { id: req.user.id } });
    if (!user) {
      res.status(403).send("없는 사람을 찾으려고 하시네요?");
    }
    const followings = await user.getFollowings();
    res.status(200).json(followings);
  } catch (error) {
    console.error(error);
    next(error);
  }
});
   case LOAD_FOLLOWINGS_REQUEST:
        draft.loadFollowingsLoading = true;
        draft.loadFollowingsError = null;
        draft.loadFollowingsDone = false;
        break;
      case LOAD_FOLLOWINGS_SUCCESS:
        draft.loadFollowingsLoading = false;
        draft.me.Followings = action.data;
        draft.loadFollowingsDone = true;
        break;
      case LOAD_FOLLOWINGS_FAILURE:
        draft.loadFollowingsLoading = false;
        draft.loadFollowingsError = action.error;
        break;
      case LOAD_FOLLOWERS_REQUEST:
        draft.loadFollowersLoading = true;
        draft.loadFollowersError = null;
        draft.loadFollowersDone = false;
        break;
      case LOAD_FOLLOWERS_SUCCESS:
        draft.loadFollowersLoading = false;
        draft.me.Followers = action.data;
        draft.loadFollowersDone = true;
        break;
      case LOAD_FOLLOWERS_FAILURE:
        draft.loadFollowersLoading = false;
        draft.loadFollowersError = action.error;
        break;
//LoadFollowers
function loadFollowersAPI(data) {
  return axios.get("/user/followers", data);
}

function* loadFollowers(action) {
  try {
    const result = yield call(loadFollowersAPI, action.data);
    yield put({
      type: LOAD_FOLLOWERS_SUCCESS,
      data: result.data,
    });
  } catch (err) {
    console.error(err);
    yield put({
      type: LOAD_FOLLOWERS_FAILURE,
      error: err.response.data,
    });
  }
}

//LoadFollowings
function loadFollowingsAPI(data) {
  return axios.get("/user/followings", data);
}

function* loadFollowings(action) {
  try {
    const result = yield call(loadFollowingsAPI, action.data);
    yield put({
      type: LOAD_FOLLOWINGS_SUCCESS,
      data: result.data,
    });
  } catch (err) {
    console.error(err);
    yield put({
      type: LOAD_FOLLOWINGS_FAILURE,
      error: err.response.data,
    });
  }
}

 스크린샷 2023-04-12 오후 10.48.51.png

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

db 데이터가 저게 다인가요?? userId가 아니라 followerId, followingId 컬럼이 있어야 하는데요. DB를 잘못 만드신 것 같습니다.

장산님의 프로필 이미지
장산
질문자

follow에서 컬럼 수정할려고하는데 followerId, followingId 넣고 적용시키고 다시 로그인하니까 에러가 뜨네요 ㅠㅠ

스크린샷 2023-04-12 오후 11.39.45.png스크린샷 2023-04-12 오후 11.42.06.png칼럼 넣을때 not null 등등 뭐 체크 해야하는거있나요? 제가 아직 db다루는법을 잘모르겠습니다 ㅠㅠ

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

이건 시퀄라이즈에서 User.js 모델에서 belongsToMany 설정을 잘못 하신 것 같습니다.

현재 강좌에서 디비는 직접 건드는 게 아니라 시퀄라이즈에서 알아서 생성해주는 것입니다.

그런데 디비가 잘못되었다면 이건 시퀄라이즈 코드쪽 문제입니다.

장산님의 프로필 이미지
장산
질문자

진짜 시퀄라이즈쪽 코드 비교하면서도 오타를 발견 못했는데 일단 제로초님 코드 복붙하니까 작동되긴하네요...감사합니다ㅠㅠ 해결되긴했습니다

앞으로는 디비문제있으면 시퀄라이즈를 보겠습니다 ㅠㅠ

밤늦게까지 죄송합니다!

장산님의 프로필 이미지
장산

작성한 질문수

질문하기