如何使用服务器端插件 Nuxt 3 的 event.context 来使用 NuxtApp

问题描述 投票:0回答:1

我编写了一个简单的插件,它提供了可在 Nuxt 3 应用程序的客户端和服务器端使用的资源。不幸的是,在服务器端的defineEventHandler 中调用useNuxtApp() 失败。我看到这个链接https://github.com/nuxt/nuxt/discussions/24251它指出你不能在服务器端调用useNuxtApp。如何使用 event.context 访问插件?当我 console.log 事件时,我发现上下文没有与我的插件相关的信息。 这是一些说明问题的代码。我在模块中的代码公开了 useNuxtApp 因为它是一个 Nuxt 插件

                  // Not Allowed here  
                   import {useNuxtApp} from '@nuxt/kit"
                  
                   defineEventHandler(event){
                     // Can I do this?
                     const kfactory = event.context.$kafkaFactory
                     // And use it like this
                     kfactory.publish(requestPayload)

                     //const requestPayload = event.readBody()
                    //Cannot find useNuxtApp 
                    // const { $kafkaFactory } = useNuxtApp()
                    // rest of code
                   }

问题是 Nuxt 抱怨服务器端不允许导入引用 useNuxtApp。但是,如果我尝试在不导入的情况下引用 useNuxtApp,则会收到未定义 useNuxtApp() 的引用错误。这就是为什么我提供了有关此问题的问题的参考。该插件的代码与该错误无关。该代码在客户端运行良好,当我在服务器端使用 useNuxtApp 时它才起作用,如上面的代码所示

nuxtjs3 nuxt3
1个回答
0
投票

您应该能够将其添加到 Nitro 插件中的事件上下文中。


export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('request', (event) => {
    event.context.kafkaFactory = ...
  });
});

为了确保它保持类型安全,您可以使用以下代码创建一个

index.d.ts
文件:

declare module 'h3' {
  interface H3EventContext {
    kafkaFactory?: <your-type-here>
  }
}

// important to export something
export {}
© www.soinside.com 2019 - 2024. All rights reserved.