serverMiddleware 访问 Nuxt 实例或上下文

时间:2020-12-31 03:51:36

标签: nuxt.js servermiddleware

我试图从服务器中间件访问 Nuxt 运行时变量

例如我有这个 context.$db 是我从这个插件添加的

nuxt.config.js


    plugins: [
        { src: '~/plugins/db_runtime.js', mode: 'server' }
    ]

~/plugins/db_runtime.js


    db = 'test'
    
    export default ({ app }, inject) => {
        inject('db', db)
    }

然后我添加了一个服务器中间件:


    serverMiddleware: [
        { path: '/api', handler: '~/api/index.js' },
    ],

服务器中间件:~/api/index.js


    export default function(res, req) {
    }

无论如何可以从那里访问 context.$db 吗? 即

    export default function(res, req) {
        $config.db = null
    }

2 个答案:

答案 0 :(得分:0)

对于静态数据,我通常使用在 nuxt.config.js 中声明的 environment variables (.env)modules 来传递数据。

对于动态数据,由于 serverMiddleware 始终在您的 nuxt 应用程序的同一生命周期中被调用,您可以使用 asyncData()fetch()axios 作为 HTTP 请求安全地发送数据

>

serverMiddle 生命周期请参考以下链接/图表:

Understanding modules, serverMiddleware and plugins in Nuxt.js configuration

答案 1 :(得分:0)

所以我不是 100% 精通 Nuxt lifecycle (v2.x),但我认为在 serverMiddleware 生命周期阶段您无法访问 Nuxt 应用程序上下文。 serverMiddleware 确实是基于 connect(由 Express 内部使用,顺便说一句)用于处理 reqresnext 参数,这些参数代表请求、响应, 和 nextconnect 的流管理参数。

基本的概念原因是 Nuxt 应用上下文同时支持服务器端和客户端,默认的“通用”模式是 Nuxt 的核心目标。 connect 实际上是一个仅限服务器端的库,旨在处理应用服务器的请求和响应性质。

由于您需要 config.$db,如果您需要的配置值是静态的,那么可能有另一种方法来使用 nuxt.config envserverMiddleware 中的通用环境变量。 $config 是一种较新的 Nuxt 构造,旨在允许更灵活的运行时环境变量(以及普通的 env 变量)。

这是 Nuxt 提供的 middlewareserverMiddleware 解释的 current 2.x link。我还剪切/粘贴了文本信息,以防 Nuxt 上的链接失效。

<块引用>

serverMiddleware vs 中间件!

不要将它与路由 middleware 混淆,后者在客户端或 SSR 中由 Vue 在每条路由之前调用。 serverMiddleware 属性中列出的中间件在 vue-server-renderer 之前在服务器端运行,可用于处理 API 请求或提供资产等特定于服务器的任务。

<块引用>

不要将 serverMiddleware 添加到 middleware/ 目录。

<块引用>

中间件,由 webpack 捆绑到您的生产包中并在 beforeRouteEnter 上运行。如果您将 serverMiddleware 添加到 middleware/ 目录,Nuxt 会错误地将其识别为 middleware,并将错误的依赖项添加到您的包中或生成错误。

顺便说一句,与往常一样,如果我对上述任何一项都不正确,我总是很感激 Stackflow 用户指出什么是错的或可以更好地解释