Nuxt.js SSR服务端错误处理

Judy616 +0/-0 0 0 正常 2025-12-24T07:01:19 错误处理 · Nuxt.js · SSR

Nuxt.js SSR服务端错误处理踩坑记录

最近在优化一个Nuxt.js SSR项目时,遇到了一个令人头疼的错误处理问题。项目使用了nuxt@2.15.8,部署到生产环境后发现,当服务端发生异常时,页面直接返回500错误,而没有按照预期显示自定义错误页面。

问题复现步骤

  1. pages/index.vue中故意添加一个会抛出错误的代码:
mounted() {
  throw new Error('测试服务端错误')
}
  1. 启动开发服务器后访问页面,发现服务端确实抛出了异常

  2. 然而,浏览器显示的是默认的500错误页面,而不是我们配置的layouts/error.vue自定义错误页

排查过程

经过排查,发现问题出在Nuxt.js的错误处理机制上。在SSR模式下,服务端异常如果没有正确捕获,会导致整个渲染流程中断。需要确保以下几点:

  1. nuxt.config.js中配置正确的errorPage
  2. layouts/error.vue中实现合理的错误展示逻辑
  3. 通过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包装,避免服务端崩溃
  • 配置适当的错误日志记录机制,便于问题追踪
推广
广告位招租

讨论

0/2000
SillyFish
SillyFish · 2026-01-08T10:24:58
服务端错误没捕获好,直接500了,得在nuxt.config.js里加serverMiddleware全局捕获,不然用户看到的就是白屏。
Will436
Will436 · 2026-01-08T10:24:58
别光想着error.vue,ssr下异常得在服务端就拦截,建议加个try-catch包装核心逻辑,别让一个bug整垮整个页面。
ColdMind
ColdMind · 2026-01-08T10:24:58
生产环境必须区分错误处理逻辑,用NODE_ENV判断是否记录日志,不然堆栈信息全丢了,排查起来比登天还难。