插件

使用插件来扩展 Nitro 的运行时行为。
Nitro v3 Alpha 文档仍在开发中 — 预计会有更新、不完善之处以及偶尔的不准确。

Nitro 插件将在服务器启动时执行一次,以允许扩展 Nitro 的运行时行为。 它们接收 nitroApp 上下文,可用于挂载 Nitro 生命周期事件。

插件会从 plugins/ 目录自动注册,并在第一次 Nitro 初始化时同步运行(按文件名顺序)。

示例:

plugins/test.ts
import { definePlugin } from "nitro";

export default definePlugin((nitroApp) => {
  console.log('Nitro 插件', nitroApp)
})

如果你的插件在其他目录,可以使用 plugins 选项:

nitro.config.ts
import { defineNitroConfig } from "nitro/config";

export default defineNitroConfig({
  plugins: ['my-plugins/hello.ts']
})

Nitro 运行时钩子

你可以使用 Nitro 的 hooks 来通过插件注册自定义(异步或同步)函数,以扩展 Nitro 的默认运行时行为。

示例:

import { definePlugin } from "nitro";

export default definePlugin((nitro) => {
  nitro.hooks.hook("close", async () => {
    // 当 nitro 正在关闭时执行
  });
})

可用的钩子

  • "request", (event) => {}
  • "error", (error, { event? }) => {}
  • "response", (event, { body }) => {}

示例

捕获错误

你可以使用插件捕获所有应用错误。

import { definePlugin } from "nitro";

export default definePlugin((nitro) => {
  nitro.hooks.hook("error", async (error, { event }) => {
    console.error(`${event.path} 应用错误:`, error)
  });
})

优雅关闭

服务器将优雅关闭,并等待由 event.waitUntil 发起的任何后台挂起任务完成。

请求和响应生命周期

你可以使用插件注册钩子,在请求生命周期中运行:

import { definePlugin } from "nitro";

export default definePlugin((nitroApp) => {
  nitroApp.hooks.hook("request", (req) => {
    console.log("on request", req.url);
  });
});