You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt3中间件使用Pinia报错:未找到活跃Pinia实例

解决Nuxt3路由中间件中Pinia未激活的错误

错误原因

出现getActivePinia() was called but there was no active Pinia错误,核心原因有两点:

  • 路由中间件调用Pinia store时,Pinia实例尚未完成初始化挂载
  • 使用storeToRefs获取的响应式状态是ref对象,直接判断时未访问.value属性

解决方案

1. 确认Pinia在Nuxt3中的基础配置

先确保已安装@pinia/nuxt并在nuxt.config.ts中完成配置:

export default defineNuxtConfig({
  modules: ['@pinia/nuxt'],
})

2. 修改路由中间件代码

显式通过useNuxtApp()获取已挂载的Pinia实例,并正确访问ref状态的.value属性:

import {
  abortNavigation,
  defineNuxtRouteMiddleware,
  navigateTo,
  useNuxtApp,
} from "nuxt/app";
import { storeToRefs } from "pinia";
import { useAuthStore } from "~/store/authStore";

export default defineNuxtRouteMiddleware((to) => {
  // 传入Nuxt App中已初始化的Pinia实例
  const authStore = useAuthStore(useNuxtApp().$pinia);
  const { isAuthenticated } = storeToRefs(authStore);

  // 访问ref的.value属性进行逻辑判断
  if (isAuthenticated.value && to?.name === "login") {
    return navigateTo("/");
  }

  if (!isAuthenticated.value && to?.name !== "login") {
    abortNavigation();
    return navigateTo("/login");
  }
});

关键说明

  • useNuxtApp().$pinia能确保获取到已完成挂载的Pinia实例,避免store找不到活跃上下文的问题
  • storeToRefs提取的状态是响应式ref对象,必须通过.value访问实际值,否则判断逻辑会失效

内容的提问来源于stack exchange,提问作者Nikodem Wicon - Nicode.pl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:16:07