Guide

服务器工具

享受自动导入的服务器工具,并扩展您自己的工具。

自动导入

在阅读剩余文档时,您可能会注意到使用工具的示例中没有 imports。 这是因为 Nitro 使用 unjs/unimport 进行自动导入工具,并支持完整的树摇滚,因此您不必手动导入!

H3 工具

Nitro 启用了所有 h3 工具 的自动导入,因此您可以使用 defineEventHandlerreadBody 等,而无需手动导入它们。

Read more in H3 文档.

utils 目录

您可以将特定于应用程序的工具添加到 utils/ 目录中,并在使用时自动导入它们。 utils 目录及其子目录中的每个导出将在您的应用程序中全局可用。

示例: 创建一个 utils/sum.ts 文件,导出一个 useSum 函数:

utils/sum.ts
export function useSum(a: number, b: number) { return a + b }

routes/index.ts 文件中使用它,而无需导入:

routes/index.ts
export default defineEventHandler(() => {
  const sum = useSum(1, 2) // 自动导入
  return { sum }
})

Nitro 工具

Nitro 还暴露了几个内置工具:

  • defineCachedFunction(fn, options) / cachedFunction(fn, options)
  • defineCachedEventHandler(handler, options) / cachedEventHandler(handler, options)
  • defineRenderHandler(handler)
  • defineRouteMeta(options) (实验性)
  • useRuntimeConfig(event?)
  • useAppConfig(event?)
  • useStorage(base?)
  • useNitroApp()
  • defineNitroPlugin(plugin)
  • nitroPlugin(plugin)
  • getRouteRules(event)
查看 源代码 获取可用 Nitro 自动导入的列表。
在运行 preparedev 命令时,类型会为全局自动导入自动生成。有关 IDE 支持,请参阅 TypeScript 指南。

手动导入

对于某些边缘情况(IDE 支持和 node_modules 中的库),依赖自动导入是不可能的。

您可以从虚拟的 #imports 文件中显式导入它们。

#imports 手动导入仍然具有树摇滚的好处。
plugins/test.ts
import { useStorage } from '#imports'

异步上下文 (实验性)

Nitro (2.6+) 启用了新的服务器开发体验,以便将应用程序逻辑拆分成更小的“可组合”工具,这些工具彼此完全解耦,并且可以直接访问共享上下文(请求事件),无需将其传递。此模式借鉴了 Vue 组合 API,并由 unjs/unctx 提供支持。

此功能当前支持 Node.js 和 Bun 运行时,并将很快支持其他支持 AsyncLocalStorage 接口的预设。

为了启用异步上下文功能,您必须启用 asyncContext 标志:

export default defineNitroConfig({
  experimental: {
    asyncContext: true
  }
});

启用此标志后,您可以在任何工具或可组合中使用 useEvent()(自动导入)以访问请求事件,而无需手动传递:

// routes/index.ts
export default defineEventHandler(async () => {
  const user = await useAuth()
})

// utils/auth.ts
export function useAuth() {
  return useSession(useEvent())
}