搜索

首页  >  问答  >  正文

尝试从 nuxt 3 中间件连接到 redis 客户端,但连接未定义

<p>我正在尝试连接到 Redis 服务器以从 nuxt 3 DefineNuxtRouteMiddleware 中间件获取会话数据,但没有成功。我在服务器端插件中创建了与 redis 的连接,它适用于我的所有 api 端点,但它似乎不适用于我的 rout-guards 中间件。我尝试在下面的代码中获取连接,但连接未定义。我是否错误地假设中间件服务器端执行应该有权访问 Redis 连接</p> <pre class="brush:php;toolbar:false;">if (process.server) { let session = await RedisUtil.getConnection.get(sessionID); }</pre> <p>下面是redisUtil</p> <pre class="brush:php;toolbar:false;">class RedisUtil{ static get getConnection(){ return this.connection; } static set setConnection(connection){ this.connection = connection; } static async connect(config) { let redis = createClient({ url: 'redis://' + config.redis.user + ':' + config.redis.password + '@' + config.redis.host + ':' + config.redis.port }); redis.on('error', err => console.log('Redis Client Error', err)); await redis.connect(); RedisUtil.setConnection = redis; console.log("Connected to redis"); } }</pre> <p>redis插件已加载到硝基配置中</p> <pre class="brush:php;toolbar:false;">import RedisUtil from '../utils/RedisUtil'; import config from "~/server.config" export default async (NuxtApp) => { await RedisUtil.connect(config); };</pre> <pre class="brush:php;toolbar:false;">nitro: { plugins: [ "~/server/plugins/redis.js" ], },</pre> <p>如上所述,我可以在所有其他服务器端执行中访问redis连接,但不能在中间件中访问。对此的任何帮助将不胜感激。</p>
P粉512526720P粉512526720460 天前618

全部回复(1)我来回复

  • P粉098979048

    P粉0989790482023-08-31 12:43:49

    看来您只在服务器端部分运行 Redis 请求。当客户端路由发生时使其失去上下文。

    export default defineNuxtRouteMiddleware(async (to, from) => {
      let session = '';
      if (process.server) {
        session = 'has some context';
      }
    
      // server: session = 'has some context'
      // client: session = ''
    })
    

    回复
    0
  • 取消回复