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
相关产品推荐
相关产品推荐

