• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

403 에러 발생시에 retweetError 가 null 로 찍혀여

20.11.09 13:09 작성 조회수 169

0

안녕하세요 zerocho 님 

질문이 있습니다.

현재 라우터 로직의 403 에러에 해당할 경우 (본인의 글을 리트윗 하거나 이미 리트윗한 글을 리트윗할때) 아래와 같이 응답을 하는데

        if (!post) {
            return res.status(403).send('존재하지 않는 게시글입니다.');
        }
        if (req.user.id === post.UserId || (post.Retweet && post.Retweet.UserId === req.user.id)) {
            return res.status(403).send('자신의 글은 리트윗할 수 없습니다.');
        }
문제는 프론트에서 에러 메세지를 try catch로 받을수가 없습니다. 즉 아래의 console.log("retweetAPI 호출 after"); 이 실행되지 않습니다.
function retweetAPI(data) {
    console.log("data : ", data);
    return axios.post(`/post/${data}/retweet`);
}
function* retweet(action) {
    console.log("saga 실행 확인");
    try {
        console.log("retweetAPI 호출 before");
        const result = yield call(retweetAPI, action.data);
        console.log("retweetAPI 호출 after");
        console.log("result : ", result);
        yield put({
            type: RETWEET_SUCCESS,
            data: result.data,
        });
    } catch (err) {
        console.error("retweet error from saga : ",  err);
        yield put({
            type: RETWEET_FAILURE,
            error: err,
        });
    }
}
그런데 리듀서의 retweetError 를 다음과 같이 설정하고
            case RETWEET_FAILURE:
                draft.retweetLoading = false;
                draft.retweetError = action.error.message;
                break;
onRetweet을 다음과 같이 설정하면
    const onRetweet = useCallback(() => {
        if (!id) {
            return alert('로그인이 필요합니다.');
        }
        dispatch({
            type: RETWEET_REQUEST,
            data: post.id,
        });
        alert("retweetError : " + retweetError)
        if (retweetError != "") {
            notification.open({
                message: '알림 메세지',
                description:
                    '본인의 글은 리트윗할수 없습니다 : ', retweetError,
                onClick: () => {
                    console.log('Notification Clicked!');
                },
            });
        }
    }, [id]);
에러 메세지가 아래처럼 null로 출력되여
라우터 로직의 에러 메세지를 받아서 alert 이나 notification 으로 출력하려면 어떻게 바꿔야 될까여?
            return res.status(403).send('자신의 글은 리트윗할 수 없습니다.');

답변 3

·

답변을 작성해보세요.

1

terecal님의 프로필

terecal

질문자

2020.11.09

답변 감사합니다

알려주신대로 하니까 일단 에러 메세지를 얻어올수 있었어여

에러 메세지를 스테이트 변수에 저장하고 그리고 알림 메세지가

한번만 출력되도록 하기 위해 아래처럼 고쳤습니다 

리트윗 에러 발생시 알림 한번만 출력 되도록 하기

1

yield call에서 403에러가 나면 바로 catch로 갑니다. retweet after가 안 실행되는 게 당연합니다.

draft.retweetError = action.error.response.data로 해보세요.

0

노트로 정리하시니 매우 좋네요~ ^^