Guide
插件
使用插件来扩展 Nitro 的运行时行为。
Nitro 插件将在服务器启动时执行一次,以便允许扩展 Nitro 的运行时行为。
它们接收 nitroApp
上下文,可以用于钩入 Nitro 生命周期事件。
插件从 plugins/
目录自动注册,并在第一次 Nitro 初始化时按文件名顺序同步运行。
示例:
// plugins/test.ts
export default defineNitroPlugin((nitroApp) => {
console.log('Nitro 插件', nitroApp)
})
如果您有插件在其他目录中,可以使用 plugins
选项:
export default defineNitroConfig({
plugins: ['my-plugins/hello.ts']
})
Nitro 运行时钩子
您可以使用 Nitro 钩子 通过在插件中注册自定义(异步或同步)函数来扩展 Nitro 的默认运行时行为。
示例:
export default defineNitroPlugin((nitro) => {
nitro.hooks.hook("close", async () => {
// 当 Nitro 被关闭时运行
});
})
可用钩子
请参见 源代码 以获取所有可用运行时钩子的列表。
"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 关闭时解析的钩子。
export default defineNitroPlugin((nitro) => {
nitro.hooks.hookOnce("close", async () => {
// 当 Nitro 被关闭时运行
console.log("正在关闭 Nitro 服务器...")
await new Promise((resolve) => setTimeout(resolve, 500));
console.log("任务完成!");
});
})
请求和响应生命周期
您可以使用插件注册一个可以在请求生命周期中运行的钩子:
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook("request", (event) => {
console.log("请求时", event.path);
});
nitroApp.hooks.hook("beforeResponse", (event, { body }) => {
console.log("响应前", event.path, { body });
});
nitroApp.hooks.hook("afterResponse", (event, { body }) => {
console.log("响应后", event.path, { body });
});
});
渲染器响应
您可以使用插件注册一个修改 renderer
响应的钩子。
export default defineNitroPlugin((nitro) => {
nitro.hooks.hook('render:response', (response, { event }) => {
// 在这里检查或修改渲染器响应
console.log(response)
})
})