minstudio

에러 핸들링과 페이지 트랜지션

Nuxt 4에서는 존재하지 않는 페이지를 방문(404)하거나 서버에서 오류(500)가 났을 때 보여줄 전역 에러 화면을 app/error.vue 파일 하나로 완벽하게 통제할 수 있습니다.

또한 페이지 간 부드러운 애니메이션을 적용하고 싶다면 app.vue<NuxtPage>에 트랜지션 속성을 부여하기만 하면 됩니다.

🚨 전역 에러 바운더리 흐름 (app/error.vue) 정상 동작 app/pages/about.vue 404 / 500 에러 발생! 🚫 최상단 에러 화면 표출 (app/error.vue) 에러 코드를 분석하여 예쁜 사과 화면을 보여줍니다. clearError() 호출 홈 화면(/)으로 안전하게 이동
<!-- ==========================================
// 📂 app/error.vue (전역 에러 처리 컴포넌트)
// ========================================== -->
<template>
  <div class="h-screen flex flex-col items-center justify-center bg-gray-50 text-center">
    <!-- 에러 정보 객체(error)를 자동으로 전달받습니다. -->
    <h1 class="text-9xl font-bold text-red-500">{{ error.statusCode }}</h1>
    
    <p class="text-2xl mt-4 font-semibold text-gray-800">
      {{ error.statusCode === 404 ? '페이지를 찾을 수 없습니다.' : '서버에 문제가 발생했습니다.' }}
    </p>

    <p class="text-gray-500 mt-2">{{ error.message }}</p>

    <!-- 에러 상태를 초기화하고 홈으로 돌아가는 버튼 -->
    <button @click="handleError" class="mt-8 bg-blue-600 text-white px-6 py-3 rounded-full hover:bg-blue-700">
      홈으로 돌아가기
    </button>
  </div>
</template>

<script setup>
// 이 페이지는 Nuxt가 에러 발생 시 자동으로 렌더링하며 error props를 내려줍니다.
const props = defineProps({
  error: Object
})

const handleError = () => {
  // clearError 훅을 실행하면 현재 에러 상태를 지우고, 지정된 경로로 리다이렉트합니다.
  clearError({ redirect: '/' })
}
</script>

<!-- ==========================================
// 📂 app/app.vue (페이지 전환 애니메이션 적용)
// ========================================== -->
<template>
  <NuxtLayout>
    <!-- transition 속성을 켜주면, 라우팅 시 자동으로 애니메이션 클래스가 붙습니다! -->
    <NuxtPage :transition="{
      name: 'page', // .page-enter-active 같은 CSS 클래스가 사용됨
      mode: 'out-in' // 이전 화면이 완전히 사라진 후 새 화면이 나타남
    }" />
  </NuxtLayout>
</template>
에러 핸들링과 페이지 트랜지션 | Minstudio