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

如何在Nuxt插件中访问$nuxt对象并调用refresh方法

Nuxt插件内调用$nuxt.refresh()的解决方案

失效原因

  • Nuxt插件的注入上下文默认不暴露$nuxt实例,直接解构$nuxt参数、从app.$nuxt/app.nuxt路径调用都会返回undefined
  • $nuxt.refresh()是客户端专属方法,服务端运行时没有对应实例,调用会直接报错

正确实现方案

Nuxt2 环境

Nuxt2会在客户端侧将$nuxt实例挂载到window对象上,只需先判断当前为客户端运行环境,直接调用即可:

export default async function ({ $axios, app }) {
  // 仅在客户端侧注册拦截器,避免服务端运行时报错
  if (process.client) {
    $axios.onError(error => {
      if (error.response.status === 401 && error.response.data.detail?.includes("Invalid token")) {
        app.$auth.strategy.token.reset()
        // 从window对象获取$nuxt实例调用refresh
        window.$nuxt.refresh()
      }
    })
  }
}

Nuxt3 环境

Nuxt3取消了全局$nuxt挂载,替换为组合式API调用,刷新页面数据直接使用内置的refreshNuxtData方法即可:

export default defineNuxtPlugin(() => {
  const { $axios } = useNuxtApp()
  const { clearToken } = useAuth() // 对应认证模块的token清除逻辑
  
  $axios.onError(error => {
    if (error.response.status === 401 && error.response.data.detail?.includes("Invalid token")) {
      clearToken()
      // 刷新所有页面异步数据,等价于Nuxt2的$nuxt.refresh()效果
      refreshNuxtData()
    }
  })
})

备选方案

如果不需要保留页面当前临时状态(比如表单输入内容、临时交互状态),也可以直接使用location.reload()强制重载整个页面,该方法兼容性最高,不需要区分Nuxt版本和运行环境。

内容的提问来源于stack exchange,提问作者Thorvald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:24:04