我试图从服务器中间件访问 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
}
答案 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 内部使用,顺便说一句)用于处理 req
、res
和 next
参数,这些参数代表请求、响应, 和 next
是 connect
的流管理参数。
基本的概念原因是 Nuxt 应用上下文同时支持服务器端和客户端,默认的“通用”模式是 Nuxt 的核心目标。 connect
实际上是一个仅限服务器端的库,旨在处理应用服务器的请求和响应性质。
由于您需要 config.$db
,如果您需要的配置值是静态的,那么可能有另一种方法来使用 nuxt.config env
和 serverMiddleware
中的通用环境变量。 $config
是一种较新的 Nuxt 构造,旨在允许更灵活的运行时环境变量(以及普通的 env 变量)。
这是 Nuxt 提供的 middleware
与 serverMiddleware
解释的 current 2.x link。我还剪切/粘贴了文本信息,以防 Nuxt 上的链接失效。
serverMiddleware vs 中间件!
不要将它与路由 middleware
混淆,后者在客户端或 SSR 中由 Vue 在每条路由之前调用。 serverMiddleware
属性中列出的中间件在 vue-server-renderer 之前在服务器端运行,可用于处理 API 请求或提供资产等特定于服务器的任务。
不要将 serverMiddleware
添加到 middleware/ 目录。
中间件,由 webpack 捆绑到您的生产包中并在 beforeRouteEnter 上运行。如果您将 serverMiddleware
添加到 middleware/ 目录,Nuxt 会错误地将其识别为 middleware
,并将错误的依赖项添加到您的包中或生成错误。
顺便说一句,与往常一样,如果我对上述任何一项都不正确,我总是很感激 Stackflow 用户指出什么是错的或可以更好地解释