Skip to content

错误处理类

函数用途显示错误页面返回值
useError获取全局错误Ref<Error>
createError创建错误对象H3Error
showError显示全屏错误页面undefined
clearError清除错误并恢复undefined

useError

获取当前全局错误的引用。

ts
const error = useError()

if (error.value) {
  console.log(error.value.statusCode)      // 404
  console.log(error.value.statusMessage)   // 'Not Found'
  console.log(error.value.message)         // 详细消息
  console.log(error.value.data)            // 附加数据
}

useError 的用途

  • 在布局中检查是否有全局错误
  • 根据错误类型显示不同的 UI
  • 判断应用是否处于错误状态

createError

创建错误对象,不会自动显示错误页面。需要 throw 才能触发。

ts
// 完整形式
const error = createError({
  statusCode: 404,
  statusMessage: 'Not Found',   // 简短的 HTTP 状态描述
  message: '页面不存在',         // 详细的错误描述(可包含中文)
  fatal: false,                 // 致命错误(无法通过 clearError 恢复)
  data: { field: 'id' },        // 附加数据
})

// 简写
throw createError('出错了')                     // 默认 500
throw createError({ statusCode: 404 })         // 只有状态码

服务端 vs 客户端

  • 服务端throw createError() → 返回 HTTP 错误响应
  • 客户端throw createError() → 需要自己 try/catch

TIP

详见 错误创建与抛出 完整教程

showError

显示全屏错误页面(error.vue)。

ts
// 完整形式
showError({
  statusCode: 403,
  statusMessage: 'Forbidden',
  message: '无权限访问',
})

// 简写
showError('出错了')

showError vs createError

  • showError:创建 + 立即显示错误页面
  • createError:只创建错误对象,需要 throw 才触发

客户端主动显示错误用 showError

服务端抛出错误用 throw createError()

clearError

清除错误并恢复应用状态。

ts
// 清除并跳转(推荐)
clearError({ redirect: '/' })

// 仅清除(尝试恢复之前的状态)
clearError()

clearError 的完整行为

  1. 清除全局错误状态
  2. 如果传了 redirect,导航到指定页面
  3. 如果没有 redirect,重新渲染之前的页面

INFO

推荐总是带上 redirect 避免再次触发导致错误的页面

完整错误处理流程

ts
// 1. 服务端抛出错误
throw createError({ statusCode: 404, statusMessage: 'Not Found', message: '资源不存在' })

// 2. 客户端显示错误页面
showError({ statusCode: 403, statusMessage: 'Forbidden', message: '无权限访问' })

// 3. 在 error.vue 中清除错误
clearError({ redirect: '/' })

TIP

详见 错误处理 章节完整教程

基于 Nuxt 4 官方文档整理编写