Features

5 错误处理

处理页面交互、数据通讯中的错误,提升用户体验。

前言

在错误处理方面,我进行了以下处理:

  • 使用 Winston 记录日志到文件
  • 设立 error.vue 全局错误页面
  • 配置 auth/error.vue 认证错误页面

Winston 日志

配置 nuxt.config.ts, 日志文件被写到 /logs 目录下。

  nuxt3WinstonLog: {
    maxSize: '2048m',
    maxFiles: '7d',
    infoLogPath: `./logs`,
    infoLogName: `%DATE%-${process.env.NODE_ENV}-info.log`,
    errorLogPath: `./logs`,
    errorLogName: `%DATE%-${process.env.NODE_ENV}-error.log`,
    skipRequestMiddlewareHandler: false
  },

日志过期时间 7 天。

error.vue 全局错误页面

发生错误时, nuxt 将会自动跳转 error.vue ,下面的脚本将会显示一个错误的信息页来展示,并点击返回首页来引导用户接下来的操作。

<template>
  <div>
    <AppHeader />

    <UMain>
      <UContainer>
        <UPage>
          <UPageError :error="error" />
        </UPage>
      </UContainer>
    </UMain>

    <AppFooter />

    <ClientOnly>
      <LazyUContentSearch
        :files="files"
        :navigation="navigation"
      />
    </ClientOnly>

    <UNotifications />
  </div>
</template>

auth/error.vue 认证错误页面

next-auth 组件发生错误时会跳转 app/pages/auth/error.vue 组件,会传递过来 error 参数,我们需要友好的展示给用户,引导用户重新登录。

<script setup lang="ts">
const route = useRoute()
const errorCode = computed(() => route.params.error)

const page = {
  title: '认证错误',
  description: '请点击返回,重新登录、注册。'
}

...
</script>

<template>
  <UContainer>
    <UPageHeader
      v-bind="page"
      class="py-[50px]"
    />

    <UPageBody>
      <div>
        <h2>用户认证错误 {{ errorCode }}. 请重新尝试!</h2>
        <NuxtLink
          to="/"
          class="text-blue-500"
        >
          返回首页
        </NuxtLink>
      </div>
    </UPageBody>
  </UContainer>
</template>

end


Resources

Features

Company

Copyright © 2024. All rights reserved.