插件
使用插件扩展 Nitro 的 runtime 行为。
Nitro v3 Alpha 文档仍在开发中——可能会有更新、不完善的地方和偶尔的不准确信息。
Nitro 插件将在服务器启动期间执行一次,以允许扩展 Nitro 的 runtime 行为。
它们接收 nitroApp 上下文,可用于钩入 Nitro 生命周期事件。
插件从 plugins/ 目录自动注册,并在第一次 Nitro 初始化时同步运行(按文件名顺序)。
示例:
plugins/test.ts
export default defineNitroPlugin((nitroApp) => {
console.log('Nitro plugin', nitroApp)
})
如果你在其他目录中有插件,可以使用 plugins 选项:
nitro.config.ts
import { defineNitroConfig } from "nitro/config";
export default defineNitroConfig({
plugins: ['my-plugins/hello.ts']
})
Nitro runtime hooks
你可以使用 Nitro hooks 通过在插件中向生命周期事件注册自定义(异步或同步)函数来扩展 Nitro 的默认 runtime 行为。
示例:
export default defineNitroPlugin((nitro) => {
nitro.hooks.hook("close", async () => {
// 当 nitro 关闭时将运行
});
})
可用的 hooks
有关所有可用 runtime hooks 的列表,请参阅源代码。
"close", () => {}"error", (error, { event? }) => {}"render:response", (response, { event }) => {}"request", (event) => {}"beforeResponse", (event, { body }) => {}"afterResponse", (event, { body }) => {}
示例
捕获错误
你可以使用插件捕获所有应用程序错误。
export default defineNitroPlugin((nitro) => {
nitro.hooks.hook("error", async (error, { event }) => {
console.error(`${event.path} 应用程序错误:`, error)
});
})
优雅关闭
你可以使用插件注册一个在 Nitro 关闭时解析的 hook。
export default defineNitroPlugin((nitro) => {
nitro.hooks.hookOnce("close", async () => {
// 当 nitro 关闭时将运行
console.log("正在关闭 nitro 服务器...")
await new Promise((resolve) => setTimeout(resolve, 500));
console.log("任务完成!");
});
})
请求和响应生命周期
你可以使用插件注册一个可以在请求生命周期上运行的 hook:
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook("request", (req) => {
console.log("请求时", req.url);
});
nitroApp.hooks.hook("beforeResponse", (event, { body }) => {
console.log("响应时", event.path, { body });
});
nitroApp.hooks.hook("afterResponse", (event, { body }) => {
console.log("响应后", event.path, { body });
});
});