You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt 3 SSR服务器API端点失败时自定义错误页不显示问题

Nuxt3 SSR自定义错误页无法正常显示问题解决

我在Nuxt 3 SSR应用中遇到问题:当服务器API端点通过createError抛出错误时,自定义错误页无法正常显示。尝试给createError传递fatal参数(true或false)后,仍显示Chrome浏览器默认错误页而非自定义错误页,无论错误是404还是500都会出现这个问题。

相关代码

服务器API端点(server/api/test.index.get)

throw createError({ statusCode: 404, statusMessage: 'NOT_FOUND' });

页面组件(pages/index.vue)

const { data, error } = await useFetch('/api/test');

if (error.value) {
  throw createError({
     statusCode: error.value.statusCode,
     message: error.value.message
  });
}

自定义错误页(error.vue)

<script setup lang="ts">
import type { NuxtError } from '#app';

interface Props {
    error: NuxtError;
}

defineProps<Props>();

const handleError = () => clearError({ redirect: '/' });
</script>

<template>
    <NuxtLayout>
        <div>
            <h2>{{ error.statusCode }}</h2>
            <button @click="handleError">Clear errors</button>
        </div>
    </NuxtLayout>
    <Toaster />
</template>

问题排查更新

经排查,问题由使用h3-compression包的服务器插件导致,原插件代码如下:

原压缩插件(server/plugins/compression.ts)

import { useCompression } from 'h3-compression';

export default defineNitroPlugin((nitro) => {
    nitro.hooks.hook('render:response', async (response, { event }) => {
        if (!response.headers?.['content-type']?.startsWith('text/html')) return;

        await useCompression(event, response);
    });
});

解决方案

修改压缩插件代码,增加判断条件排除Nuxt内部路由的压缩处理:

修改后的压缩插件(server/plugins/compression.ts)

import { useCompression } from 'h3-compression';

export default defineNitroPlugin((nitro) => {
    nitro.hooks.hook('render:response', async (response, { event }) => {
        if (response.headers?.['content-type'].startsWith('text/html') && !event?.context?.matchedRoute?.path.startsWith('/__nuxt')) {
            await useCompression(event, response);
        }
    });
});

内容的提问来源于stack exchange,提问作者Kris D. J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:53:10