服务器引擎
Nuxt 由一个新的服务器引擎驱动:Nitro。
在构建 Nuxt 时,我们创建了一个新的服务器引擎:Nitro。
它提供了许多功能:
- 支持跨平台运行,包括 Node.js、浏览器、服务工作者等。
- 开箱即用的无服务器支持。
- 支持 API 路由。
- 自动代码拆分和异步加载代码块。
- 静态 + 无服务器站点的混合模式。
- 带有热模块重载的开发服务器。
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 生成一个独立的服务器构建(dist),不依赖 node_modules。
Nuxt 2 的服务器不是独立的,运行 nuxt start 时需要 Nuxt 核心的一部分(使用 nuxt-start 或 nuxt 发布包)或自定义编程方式,这种方式脆弱且容易出错,不适合无服务器和服务工作者环境。
Nuxt 在运行 nuxt build 时,会生成该构建文件到 .output 目录。
输出包含运行 Nuxt 服务器的运行时代码,可以适配任何环境(包括实验性的浏览器服务工作者!)并托管静态文件,使其成为 JAMstack 的真正混合框架。此外,Nuxt 还实现了原生存储层,支持多源驱动和本地资源。