Nuxt 生命周期

理解 Nuxt 应用程序的生命周期,可以帮助您更深入地了解框架的运作方式,尤其是在服务器端渲染 (SSR) 和客户端渲染 (CSR) 方面。

本章的目标是提供一个高层次的概述,介绍框架的不同部分、它们的执行顺序以及它们如何协同工作。

服务器生命周期

在服务器端,每次向您的应用程序发出初始请求时,都会执行以下步骤:

服务器插件 一次性

Nuxt 由Nitro驱动,这是一个现代化的服务器引擎。

当 Nitro 启动时,它会初始化并执行 `/server/plugins` 目录下的插件。这些插件可以

  • 捕获并处理应用程序范围内的错误。
  • 注册在 Nitro 关闭时执行的钩子。
  • 注册请求生命周期事件的钩子,例如修改响应。
Nitro 插件在服务器启动时只执行一次。在无服务器环境中,服务器会在每次收到传入请求时启动,Nitro 插件也会如此。但是,它们不会被等待。
阅读更多内容,请访问: 文档 > 4.x > 目录结构 > 服务器 > 服务器插件

服务器中间件

在初始化 Nitro 服务器后,`server/middleware/` 目录下的中间件会在每次请求时执行。中间件可用于身份验证、日志记录或请求转换等任务。

从中件件返回一个值将终止请求并将返回值作为响应发送。通常应避免此行为,以确保正确的请求处理!
阅读更多内容,请访问: 文档 > 4.x > 目录结构 > 服务器 > 服务器中间件

应用插件

首先创建 Vue 和 Nuxt 实例。之后,Nuxt 会执行其应用插件。这包括:

  • 内置插件,例如 Vue Router 和 `unhead`。
  • 位于 `app/plugins/` 目录下的自定义插件,包括没有后缀的插件(例如 `myPlugin.ts`)和带有 `.server` 后缀的插件(例如 `myServerPlugin.server.ts`)。

插件按特定顺序执行,并且可能相互依赖。有关更多详细信息,包括执行顺序和并行性,请参阅 插件文档

在此步骤之后,Nuxt 会调用 `app:created` 钩子,可用于执行其他逻辑。
在 **文档 > 4 X > 目录结构 > App > 插件** 中阅读更多内容。

路由验证

在初始化插件并执行中间件之前,如果 `definePageMeta` 函数中定义了 `validate` 方法,Nuxt 会调用它。`validate` 方法可以是同步或异步的,通常用于验证动态路由参数。

  • 如果参数有效,`validate` 函数应返回 `true`。
  • 如果验证失败,它应返回 `false` 或一个包含 `status` 和/或 `statusText` 的对象来终止请求。

有关更多信息,请参阅 路由验证文档

阅读更多内容,请访问: 文档 > 4.x > 入门 > 路由 > 路由验证

应用中间件

中间件允许您在导航到特定路由之前运行代码。它通常用于身份验证、重定向或日志记录等任务。

在 Nuxt 中,有三种类型的中间件:

  • 全局路由中间件
  • 命名路由中间件
  • 匿名(或内联)路由中间件

Nuxt 在初始页面加载时(服务器端和客户端端都会)执行所有全局中间件,然后在任何客户端导航之前再次执行。命名和匿名中间件仅在中间件属性(在相应的页面组件中定义的页面元数据)中指定的路由上执行。

有关每种类型和示例的详细信息,请参阅 中间件文档

服务器端的任何重定向都将导致向浏览器发送 `Location:` 头部;然后浏览器会向该新位置发出新请求。发生这种情况时,所有应用程序状态都将被重置,除非将其持久化到 cookie 中。

文档 > 4.x > 目录结构 > App > Middleware 中阅读更多内容。

页面和组件

在此阶段,Nuxt 使用 `useFetch` 和 `useAsyncData` 来渲染页面及其组件并获取任何所需数据。由于服务器端没有动态更新和 DOM 操作,Vue 的生命周期钩子,如 `onBeforeMount`、`onMounted` 以及后续钩子,在 SSR 期间 **不** 会执行。

默认情况下,Vue 在 SSR 期间会暂停依赖项跟踪,以提高性能。

服务器端没有响应性,因为 Vue SSR 以自顶向下的方式渲染应用程序为静态 HTML,这使得无法回过头来修改已渲染的内容。
您应该避免在 `