如何在Nuxt服务器中间件中访问模块提供的自定义Logger?
解决Nuxt服务器中间件访问模块自定义Logger的问题
要让服务器中间件能访问你的自定义Logger,需要通过Nitro服务器插件将Logger注入到Nitro上下文,而非仅依赖客户端/服务端的Vue插件。以下是具体实现步骤:
1. 修改Nuxt模块配置,注册Nitro插件
在你的模块主文件(比如modules/logger/module.ts)中,保留原有Vue插件注册的同时,新增Nitro插件的钩子:
import { defineNuxtModule } from '@nuxt/kit' import Logger from './logger' export default defineNuxtModule({ setup(options, nuxt) { // 保留原有插件,供客户端和服务端Vue组件使用 nuxt.hook('app:resolve', (app) => { app.plugins.push({ src: './plugins/logger', mode: 'all' }) }) // 注册Nitro服务器插件,扩展服务器上下文 nuxt.hooks.hook('nitro:config', (nitroConfig) => { nitroConfig.plugins = nitroConfig.plugins || [] nitroConfig.plugins.push({ src: './server/plugins/logger', }) }) } })
2. 创建Nitro服务器插件,注入Logger到上下文
在模块目录下创建server/plugins/logger.ts文件,实例化Logger并挂载到Nitro应用上下文:
import type { NitroApp } from 'nitropack' import Logger from '../../logger' export default defineNitroPlugin((nitroApp: NitroApp) => { const logger = new Logger() // 将Logger挂载到Nitro上下文,所有服务器端代码均可访问 nitroApp.context.logger = logger })
3. 在服务器中间件中使用Logger
现在你可以在server/middleware/log.ts中通过event.context获取Logger:
export default defineEventHandler((event) => { event.context.logger.info('Middleware called') })
补充说明
- Nuxt服务器中间件运行在Nitro环境中,不属于Vue组件上下文,因此无法使用
useNuxtApp。 - 通过Nitro插件注入的上下文变量,不仅可用于服务器中间件,还能在API路由、服务器端函数中访问。
内容的提问来源于stack exchange,提问作者CommanderData
相关产品推荐
相关产品推荐

