微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

serverMiddleware 访问 Nuxt 实例或上下文

如何解决serverMiddleware 访问 Nuxt 实例或上下文

我试图从服务器中间件访问 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
    }

解决方法

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

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

>

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

Understanding modules,serverMiddleware and plugins in Nuxt.js configuration

,

所以我不是 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 用户指出什么是错的或可以更好地解释

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?