我试图从serverMiddleware访问Nuxt运行时变量
示例我有这个上下文.$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:
serverMiddleware: [
{ path: '/api', handler: '~/api/index.js' },
],
~/api/index.js:serverMiddleware
export default function(res, req) {
}
是否存在访问上下文.$db的方法?i.e
export default function(res, req) {
$config.db = null
}
发布于 2020-12-31 07:42:16
对于静态数据,我通常做的是使用环境变量(.env)或在nuxt.config.js中声明的模块传递数据。
对于动态数据,由于serverMiddleware总是在您的nuxt应用程序的同一个生命周期中调用的,所以您可以使用asyncData()、取()或axios安全地将数据作为HTTP请求发送
请参阅serverMiddle生命周期的下列链接/图表:
发布于 2021-08-06 18:05:44
所以我不是100%精通Nuxt生命周期 (v2.x),但是afaik在serverMiddleware生命周期阶段不能访问Nuxt应用程序上下文。serverMiddleware
实际上是connect
-based (由Express,btw在内部使用),用于处理req
、res
和next
参数,它们表示请求、响应和next
(connect
的流管理参数)。
基本的概念原因是Nuxt应用程序上下文同时支持服务器端和客户端,默认的“通用”模式是Nuxt的核心目标。connect
实际上是一个服务器端的库,旨在处理应用服务器的请求和响应性质。
由于您需要config.$db
,只要您需要的配置值是静态的,那么在serverMiddleware
中可能有一种使用nuxt.config env
和通用环境变量的替代方法。$config
是一个较新的Nuxt结构,旨在允许更灵活的运行时环境变量(以及正常的env )。
以下是Nuxt提供的电流2.x链路 to middleware
vs serverMiddleware
的解释。我还剪切/粘贴了文本信息,以防Nuxt上的链接褪色。
serverMiddleware与中间件! 不要将其与路由
middleware
混淆,这些路由在每条路由之前由Vue在客户端或SSR中调用。serverMiddleware
属性中列出的中间件在vue- server呈现器之前运行服务器端,可以用于处理API请求或服务资产等特定于服务器的任务。不要将serverMiddleware
添加到中间件/目录中。中间件,由webpack捆绑到您的产品包中,并在beforeRouteEnter上运行。如果将serverMiddleware
添加到中间件/目录中,则Nuxt将错误地将其作为middleware
,并将错误的依赖项添加到包中或生成错误。
顺便说一句,与往常一样,如果我在上述任何一个问题上都不正确,我总是欣赏Stackflow用户,他们指出了问题所在,或者可以更好地解释
https://stackoverflow.com/questions/65516416
复制相似问题