我编写了一个简单的插件,它提供了可在 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 时它才起作用,如上面的代码所示
您应该能够将其添加到 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 {}