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

Next.js生产环境展示服务端可控错误信息的配置方法

Next.js生产环境保留服务端组件错误信息的方案

官方默认没有直接的配置项可以跳过生产环境的错误信息剥离,但可以通过两种方式实现你的需求:

  • 自定义错误对象(推荐)
    在服务端组件里,不要抛出原生Error对象,而是自定义一个包含业务错误信息的普通对象。Next.js只会剥离原生Error的敏感内容,自定义对象会完整传递到最近的error.js中。
    示例代码:

    // 服务端组件内抛出可控错误
    throw {
      type: 'ControlledError',
      message: '用户输入格式不正确,请重新填写',
      code: 'INVALID_INPUT'
    };
    

    在error.js中直接读取展示:

    'use client';
    
    export default function Error({ error, reset }) {
      return (
        <div>
          <h2>操作失败</h2>
          <p>{error.message || '未知错误'}</p>
          <button onClick={() => reset()}>重新尝试</button>
        </div>
      );
    }
    
  • 挂载自定义属性到Error对象(不推荐,存在风险)
    如果你坚持使用原生Error,可以在抛出前把需要展示的信息挂载到Error的自定义属性上。生产环境Next.js会剥离默认的message字段,但自定义属性大概率会被保留(此行为属于未公开的内部细节,可能随版本变更)。
    示例代码:

    // 服务端组件内
    const err = new Error('敏感内容会被自动剥离');
    err.displayMessage = '需要展示给用户的实际错误信息';
    throw err;
    

    在error.js中读取error.displayMessage即可。注意:这种方式依赖Next.js内部实现,不保证长期可用,且必须确保自定义属性中没有敏感信息,避免泄露服务器端细节。

无论选择哪种方式,都要确保传递的错误信息是非敏感、用户友好的,不要暴露服务器配置、数据库路径等隐私内容。

内容的提问来源于stack exchange,提问作者omair azam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:48:11