服务器引擎

Nuxt 由一个全新的服务器引擎提供支持:Nitro。

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

它内置了许多功能:

  • 支持 Node.js、浏览器、Service Worker 及更多平台的跨平台支持。
  • 开箱即用的无服务器支持。
  • 支持 API 路由。
  • 自动代码拆分和异步加载的代码块。
  • 用于静态与无服务器站点的混合模式。
  • 带有热模块重载的开发服务器。

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

Nuxt 2 中的服务器不是独立的,必须借助 Nuxt 核心模块(通过 nuxt start 命令,使用 nuxt-startnuxt 包),或通过自定义编程方式运行,这种方式脆弱且易出错,不适用于无服务器和 Service Worker 环境。

Nuxt 在运行 nuxt build 时会生成这个构建产物,输出到 .output 目录中。

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

在 GitHub 上阅读更多关于 Nitro 引擎的信息。