im试图从服务器中间件访问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: [
{ path: '/api', handler: '~/api/index.js' },
],
服务器中间件:~/api/index.js:
export default function(res, req) {
}
是否存在访问上下文的权限$数据库?即
export default function(res, req) {
$config.db = null
}
对于动态数据,由于serverMiddleware总是在nuxt应用程序的同一生命周期中调用,因此您可以使用asyncData((或fetch((或axios 安全地将数据作为HTTP请求发送
服务器中间生命周期请参考以下链接/图表:
了解Nuxt.js配置中的模块、服务器中间件和插件
所以我不是100%精通Nuxt生命周期(v2.x(,但在服务器中间件生命周期阶段,你可能无法访问Nuxt应用程序上下文。serverMiddleware
实际上是基于connect
的(由Express、btw内部使用(,用于处理req
、res
和next
参数,这些参数表示请求、响应,而next
是connect
的流管理参数。
基本的概念原因是Nuxt应用程序上下文同时支持服务器和客户端,默认的"通用"模式是Nuxt的核心目标。connect
实际上是一个仅用于服务器端的库,旨在处理应用程序服务器的请求和响应特性。
由于您需要config.$db
,只要您需要的配置值是静态的,那么可能有另一种方法可以使用nuxt.configenv
和serverMiddleware
中的常规环境变量。$config
是一个较新的Nuxt构造,旨在允许更灵活的运行时环境变量(以及正常的env-var(。
以下是Nuxt提供的middleware
与serverMiddleware
解释的当前2.x链接。我还剪切/粘贴了文本信息,以防Nuxt上的链接衰减。
服务器中间件vs中间件
不要将其与客户端或SSR中Vue在每条路由之前调用的路由
middleware
混淆。serverMiddleware
属性中列出的中间件在vue-server-renderer之前运行在服务器端,可用于特定于服务器的任务,如处理API请求或服务资产。
不要将
serverMiddleware
添加到中间件/目录中。
中间件由webpack捆绑到您的生产捆绑包中,并在beforeRouteEnter上运行。如果将
serverMiddleware
添加到中间件/目录,Nuxt将错误地将其作为middleware
,并将错误的依赖项添加到捆绑包中或生成错误。
Btw,一如既往,如果我在上述任何一项上都不正确,我总是感谢Stackflow用户指出错误之处或可以更好地解释