服务器引擎
Nuxt 由全新的服务端引擎:Nitro 提供驱动。
在构建 Nuxt 的同时,我们创建了一个全新的服务端引擎:Nitro。
它具有许多特性
- 支持 Node.js、浏览器、Service Worker 等跨平台特性。
- 开箱即用的 Serverless 支持。
- API 路由支持。
- 自动代码分割与异步加载代码块。
- 适用于静态 + serverless 站点的混合模式。
- 带有热模块重载功能的开发服务器。
API 层
服务端 API 端点和中间件由 Nitro 添加,其内部使用了 h3。
核心特性包括
- 处理程序可以直接返回对象/数组以自动处理 JSON 响应
- 处理程序可以返回 Promise,并且会被 await(同时支持
res.end()和next()) - 用于请求体解析、Cookie 处理、重定向、标头等的辅助函数
查看 h3 文档以了解更多信息。
直接 API 调用
Nitro 允许通过全局可用的 $fetch 辅助函数“直接”调用路由。如果运行在浏览器中,它会向服务器发起 API 调用;但如果运行在服务器上,它将直接调用相关函数,从而节省一次额外的 API 调用。
- 自动解析 JSON 响应(如果需要,可访问原始响应)
- 请求体和参数会被自动处理,并带有正确的
Content-Type标头
有关 $fetch 特性的更多信息,请查阅 ofetch。
类型化的 API 路由
当使用 API 路由(或中间件)时,只要你返回一个值而不是使用 res.end() 发送响应,Nitro 就会为这些路由生成类型定义。
在使用 $fetch() 或 useFetch() 时,你可以访问这些类型。
独立服务器
Nitro 生成一个独立于 node_modules 的独立服务器分发包。
Nuxt 2 中的服务器不是独立的,它需要通过运行 nuxt start(配合 nuxt-start 或 nuxt 分发包)或自定义编程式用法来引入 Nuxt 核心的一部分,这种方式很脆弱、容易出错,且不适合 serverless 和 service worker 环境。
当运行 nuxt build 时,Nuxt 会将此分发包生成到 .output 目录中。
该输出包含可在任何环境中运行 Nuxt 服务器的运行时代码(包括实验性的浏览器 service worker!),并能提供静态文件服务,使其成为 JAMstack 的真正混合框架。此外,Nuxt 还实现了一个原生存储层,支持多源驱动程序和本地资源。