服务器引擎

Nuxt 由全新的服务端引擎:Nitro 提供驱动。

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

它具有许多特性

  • 支持 Node.js、浏览器、Service Worker 等跨平台特性。
  • 开箱即用的 Serverless 支持。
  • API 路由支持。
  • 自动代码分割与异步加载代码块。
  • 适用于静态 + serverless 站点的混合模式。
  • 带有热模块重载功能的开发服务器。

API 层

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

核心特性包括

  • 处理程序可以直接返回对象/数组以自动处理 JSON 响应
  • 处理程序可以返回 Promise,并且会被 await(同时支持 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 start(配合 nuxt-startnuxt 分发包)或自定义编程式用法来引入 Nuxt 核心的一部分,这种方式很脆弱、容易出错,且不适合 serverless 和 service worker 环境。

当运行 nuxt build 时,Nuxt 会将此分发包生成到 .output 目录中。

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

在 GitHub 上了解更多关于 Nitro 引擎的信息。