You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:02:40