错误类
createError
创建 Nuxt 错误对象,可在服务端和客户端使用。
ts
function createError(
err: string | {
statusCode: number // HTTP 状态码
statusMessage?: string // 状态消息(短描述)
message?: string // 详细信息
fatal?: boolean // 是否致命错误(触发错误页面)
data?: any // 附加数据
cause?: Error // 原始错误
}
): H3Errorts
// 完整形式
throw createError({
statusCode: 404,
statusMessage: 'Not Found',
message: '用户不存在',
fatal: false,
data: { userId: 123 },
})
// 简写
throw createError('出错了')
throw createError({ statusCode: 404 })服务端使用
ts
// server/api/user/[id].ts
export default defineEventHandler((event) => {
const id = getRouterParam(event, 'id')
if (!id || isNaN(Number(id))) {
throw createError({
statusCode: 400,
statusMessage: 'Bad Request',
message: 'Invalid user ID',
})
}
const user = await findUser(Number(id))
if (!user) {
throw createError({
statusCode: 404,
statusMessage: 'Not Found',
message: `用户 ${id} 不存在`,
})
}
return user
})TIP
在服务端抛出 createError Nitro 会自动设置对应的 HTTP 状态码
INFO
️ statusMessage 应使用简短的 HTTP 状态描述(如 "Bad Request"、"Not Found") 不要放中文或长文本。详细的错误描述应放在 message 中,否则会收到 h3 警告
showError
显示全屏错误页面(不抛出异常,适合在组件中使用)。
ts
function showError(
err: string | {
statusCode: number
statusMessage?: string
message?: string
data?: any
}
): voidts
showError({ statusCode: 403, statusMessage: 'Forbidden', message: '无权限访问' })
showError('出错了')在组件中使用
vue
<script setup>
const { data, error } = await useFetch('/api/data')
if (error.value) {
showError({
statusCode: error.value.statusCode,
statusMessage: error.value.statusMessage,
message: error.value.message,
})
}
</script>INFO
️ showError 与 createError 的区别
createError创建错误对象,需要throw抛出showError直接显示错误页面,适合异步回调中使用
clearError
清除错误并恢复应用。
ts
function clearError(options?: {
redirect?: string // 清除后跳转的路径
}): Promise<void>ts
clearError({ redirect: '/' }) // 清除并跳转首页
clearError() // 仅清除,不跳转在错误页面中使用
vue
<!-- app/error-500.vue -->
<template>
<div>
<h1>服务器错误</h1>
<button @click="handleClear">返回首页</button>
</div>
</template>
<script setup>
const props = defineProps<{ error: { statusCode: number } }>()
async function handleClear() {
await clearError({ redirect: '/' })
}
</script>TIP
clearError 会重置 Nuxt 的错误状态 并可选地导航到指定页面