Nuxt.js SSR服务端错误处理踩坑记录
最近在优化一个Nuxt.js SSR项目时,遇到了一个令人头疼的错误处理问题。项目使用了nuxt@2.15.8,部署到生产环境后发现,当服务端发生异常时,页面直接返回500错误,而没有按照预期显示自定义错误页面。
问题复现步骤
- 在
pages/index.vue中故意添加一个会抛出错误的代码:
mounted() {
throw new Error('测试服务端错误')
}
-
启动开发服务器后访问页面,发现服务端确实抛出了异常
-
然而,浏览器显示的是默认的500错误页面,而不是我们配置的
layouts/error.vue自定义错误页
排查过程
经过排查,发现问题出在Nuxt.js的错误处理机制上。在SSR模式下,服务端异常如果没有正确捕获,会导致整个渲染流程中断。需要确保以下几点:
- 在
nuxt.config.js中配置正确的errorPage - 在
layouts/error.vue中实现合理的错误展示逻辑 - 通过
serverMiddleware添加全局错误捕获中间件
解决方案
最终采用的解决方案是:
// nuxt.config.js
export default {
serverMiddleware: [
{ path: '/api', handler: require('express').Router() }
],
render: {
ssr: true
}
}
// layouts/error.vue
<template>
<div class="error-page">
<h1>{{ error.statusCode }}</h1>
<p>{{ error.message }}</p>
</div>
</template>
性能优化建议
- 在生产环境中,建议使用
process.env.NODE_ENV === 'production'来区分错误处理逻辑 - 对于关键业务逻辑,添加try-catch包装,避免服务端崩溃
- 配置适当的错误日志记录机制,便于问题追踪

讨论