createError
创建一个包含额外元数据的错误对象。
你可以使用此函数创建一个带有额外元数据的错误对象。它既可用于应用程序的 Vue 部分,也可用于 Nitro 部分,其目的是被抛出(throw)。
参数
err:string | { cause, data, message, name, stack, status, statusText, fatal }
你可以向 createError 函数传递字符串或对象。如果传递字符串,它将用作错误的 message(消息),而 status(状态码)将默认为 500。如果传递对象,你可以设置错误的多个属性,例如 status、message 以及其他错误属性。
在 Vue 应用中
如果你抛出了一个由 createError 创建的错误:
- 在服务端,它会触发一个全屏错误页面,你可以使用
clearError来清除它。 - 在客户端,它会抛出一个非致命错误供你处理。如果你需要触发全屏错误页面,可以通过设置
fatal: true来实现。
示例
app/pages/movies/[slug].vue
<script setup lang="ts">
const route = useRoute()
const { data } = await useFetch(`/api/movies/${route.params.slug}`)
if (!data.value) {
throw createError({ status: 404, statusText: 'Page Not Found' })
}
</script>
在 API 路由中
使用 createError 在服务端 API 路由中触发错误处理。
示例
server/api/error.ts
export default eventHandler(() => {
throw createError({
status: 404,
statusText: 'Page Not Found',
})
})
在 API 路由中,建议通过传递一个包含简短 statusText 的对象来使用 createError,因为客户端可以访问该字段。否则,传递给 API 路由中 createError 的 message 不会传播到客户端。或者,你可以使用 data 属性将数据传回客户端。无论如何,请务必考虑避免将动态用户输入放入消息中,以规避潜在的安全问题。