Nextjs에서 사용되는 redirect는 서버에서 페이지 이동을 시켜줄때 매우 듬직한 역할을 한다.
클라이언트 단에서는 useRouter를 이용해서 쉽게 이동 가능하지만 훅이다 보니 서버단에서는 해당 방식을 사용하기 힘들다. 그래서 redirect 함수를 이용해서 특정 상황에 다른 페이지로 보내줄 수 있다. 그런데 이 redirect의 위치에 따라서 작동하지 않을 수 있다는 사실을 알고 있는가? 나는 이번에 처음알았다.
Nextjs 14버전 서버사이드 쪽에서 api를 호출하고 그 값에 따라서 redirect를 사용하는 함수를 간단하게 만들었다. 값이 있으면 해당 redirect를 사용한다. 아래 함수는 원하는대로 작동할 수 있을까?
try{
const res = await getName();
if(res){
redirect('/name')
}
}catch(e){
// 에러 처리
console.log(e)
}
위 함수는 아쉽게도 res 값이 있더라고 원하는 방향으로 작동하지 않는다. 단 redirect는 실행되었다.
음? 페이지 전환도 안됐는데 redirect는 실행이 되었다는게 무슨 소리인가? 서버 쪽 콘솔을 확인하면 그 답을 알 수 있다.
Error: NEXT_REDIRECT 라는 에러가 찍히는 것을 알 수 있다. redirect가 작동하는 키는 에러를 발생시키는 것에 있다. 에러를 발생시키면서 현재 서버쪽에서 작동하고 있는 플로우를 멈추고 따로 지정한 페이지로 이동하게끔 하는것이다. 때문에 에러를 발생시키는 redirect를 try~catch 문에 넣으면 redirect가 발생시킨 에러를 catch가 잡아버리기 현상이 발생하게 되고, 원하는 페이지 이동이 발생하지 않게되는 것이다. 따라서 redirect 함수는 try~catch문 안에 사용하는 것을 삼가해야 할 것!!
https://nextjs.org/docs/app/api-reference/functions/redirect
Functions: redirect | Next.js
API Reference for the redirect function.
nextjs.org
이번 기회에 찾아보다보니... 친절하게 공식문서에 써..있다ㅎ;;
- In Server Actions and Route Handlers, redirect should be called after the try/catch block.
옵션을 통해서 replace 와 push를 고를 수 있다는 점까지 챙겨가면서.. 이 참에 위 부분 공식문서 살짝 정독해보는 시간을 가져보는 것도 좋겠다!
결론 : try catch 안에서 redirect 사용하지 않기!
'Front-end' 카테고리의 다른 글
[엑셀] React에서 excel 파일 받기 (1) | 2024.12.18 |
---|---|
Expected positive integer for height but received 0 of type number 해결하기 (0) | 2024.12.11 |
Warning: Extra attributes from the server: cz-shortcut-listen (1) | 2024.09.20 |
[Form] React-hook-form 으로 form 컨트롤 하기 (0) | 2024.09.05 |
[React] JSX에서 '\n'으로 줄바꾸기가 안될 때 해결방법 (3) | 2024.09.04 |