跳到主要内容

服务端引擎

Nuxt 由一个全新的服务端引擎驱动:Nitro。

在构建 Nuxt 的过程中,我们创建了一个全新的服务端引擎:Nitro

它附带许多特性:

  • 对 Node.js、浏览器、Service Worker 等的跨平台支持。
  • 开箱即用的无服务器(serverless)支持。
  • API 路由支持。
  • 自动代码分割和异步加载的 chunk。
  • 静态站点 + 无服务器站点的混合模式。
  • 带热模块重载的开发服务器。

API 层

服务端 API 端点中间件 由 Nitro 添加,其内部使用 h3

主要特性包括:

  • 处理器可以直接返回对象/数组,以获得自动处理的 JSON 响应
  • 处理器可以返回 promise,它们会被等待(res.end()next() 也受支持)
  • 用于请求体解析、cookie 处理、重定向、头部等的辅助函数

更多信息请查看 h3 文档

server/ 目录中了解更多关于 API 层的内容。

直接 API 调用

Nitro 允许通过全局可用的 $fetch 辅助函数「直接」调用路由。如果在浏览器中运行,它会向服务器发起一个 API 调用;但如果在服务端运行,它会直接调用相关函数,省去了一次额外的 API 调用

$fetch API 使用的是 ofetch,其主要特性包括:

  • 自动解析 JSON 响应(在需要时可访问原始响应)
  • 请求体和参数会被自动处理,并带上正确的 Content-Type

关于 $fetch 特性的更多信息,请查看 ofetch

类型化的 API 路由

当使用 API 路由(或中间件)时,只要你不使用 res.end() 发送响应、而是返回一个值,Nitro 就会为这些路由生成类型。

你可以在使用 $fetch()useFetch() 时访问这些类型。

独立服务器

Nitro 会产出一个独立于 node_modules 的独立服务器 dist。

Nuxt 2 中的服务器不是独立的,需要运行 nuxt start(通过 nuxt-startnuxt 发行包)或自定义编程方式调用 Nuxt 核心的一部分,这很脆弱、容易损坏,并且不适合无服务器和 Service Worker 环境。

Nuxt 在运行 nuxt build 时会在 .output 目录中生成这个 dist。

该输出包含在任何环境中运行你的 Nuxt 服务器(包括实验性的浏览器 Service Worker!)并提供你的静态文件的运行时代码,使其成为一个真正的 JAMstack 混合框架。此外,Nuxt 实现了一个原生的存储层,支持多源驱动和本地资源。

在 GitHub 上阅读更多关于 Nitro 引擎的内容。