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

如何在Nuxt.js中结合使用静态渲染页与客户端渲染页

Nuxt 实现公共页静态渲染、登录后页客户端渲染的方案

以下实现方式以主流的Nuxt3为例,Nuxt2逻辑基本一致,仅API写法有差异。

1. 渲染模式全局配置

你可以直接在nuxt.config.ts中通过routeRules规则批量指定不同路由的渲染模式,不用单独修改每个页面:

// nuxt.config.ts
export default defineNuxtConfig({
  routeRules: {
    // 公共页面启用预渲染,构建时生成静态HTML文件
    '/home': { prerender: true },
    '/about': { prerender: true },
    // 如果公共页面有统一前缀,可通过通配符批量配置
    '/public/**': { prerender: true },

    // 登录后访问的私有路由关闭SSR,走纯客户端渲染
    '/dashboard/**': { ssr: false },
    '/user/**': { ssr: false },
  }
})

2. 单页面自定义渲染模式

如果路由没有统一规则,也可以在单页面文件中通过definePageMeta单独指定渲染模式:

<!-- 公共页面 pages/about.vue -->
<script setup>
// 开启预渲染,构建时生成静态资源
definePageMeta({
  prerender: true
})
</script>
<!-- 登录后私有页面 pages/dashboard/index.vue -->
<script setup>
// 关闭SSR,走客户端渲染
definePageMeta({
  ssr: false
})
</script>

3. 登录态与路由权限衔接

新增全局路由中间件处理登录态校验,避免未登录用户直接访问私有路由:

// middleware/auth.global.ts
export default defineNuxtRouteMiddleware((to) => {
  // 替换为你实际的登录态判断逻辑,比如从cookie、pinia中取登录标识
  const hasLogin = !!useCookie('auth_token').value
  const isPrivateRoute = to.path.startsWith('/dashboard') || to.path.startsWith('/user')

  // 未登录访问私有路由,跳转到公共首页
  if (isPrivateRoute && !hasLogin) {
    return navigateTo('/home')
  }
})

4. 效果验证

  • 公共页验证:执行nuxt build构建后,查看.output/public目录下是否生成了home.html、about.html对应的静态文件;浏览器访问公共页右键查看源代码,能看到完整的页面内容,说明静态渲染生效。
  • 私有页验证:登录后访问私有路由,右键查看源代码仅能看到Nuxt基础启动代码,没有实际页面内容,说明客户端渲染生效。

注意:静态渲染的公共页面本身也支持客户端交互逻辑,不会影响登录按钮、跳转等功能的正常使用


内容的提问来源于stack exchange,提问作者Samy van Stokkum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:48:02