搜尋

首頁  >  問答  >  主體

嘗試從 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粉512526720477 天前641

全部回覆(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
  • 取消回覆