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

如何让Nuxt3全局中间件在nuxt-link跳转时触发维护模式?

问题原因及解决方案

问题原因

你直接通过process.env.MAINTENANCE获取环境变量,但Nuxt3的规则是:未以NUXT_PUBLIC_为前缀的环境变量不会暴露给客户端。

  • 页面刷新时属于服务端渲染,服务端能读取到process.env.MAINTENANCE,所以中间件正常触发重定向;
  • 通过nuxt-link跳转属于客户端导航,此时process.env.MAINTENANCE在客户端环境中是undefined,导致中间件执行到if (!isMaintenance) return;时直接退出,不执行后续重定向逻辑。

解决方案

1. 修改环境变量命名

更新~/.env文件,给维护模式变量加上NUXT_PUBLIC_前缀,确保客户端能访问到:

NUXT_PUBLIC_MAINTENANCE=true

2. 调整中间件代码

使用Nuxt提供的useRuntimeConfig()方法获取客户端可访问的环境变量,替代直接读取process.env:

export default defineNuxtRouteMiddleware((to, from) => {
    const config = useRuntimeConfig();
    const isMaintenance = config.public.MAINTENANCE;
    const allowedRoutes = [
        '/status/maintenance',
        '/legal/imprint'
    ];

    if (!isMaintenance) return;

    if (isMaintenance === 'true' && !allowedRoutes.includes(to.path)) {
        return navigateTo('/status/maintenance');
    } else if (isMaintenance === 'false' && to.path === '/status/maintenance') {
        return navigateTo('/');
    }
})

3. 重启开发服务

修改环境变量后,需要重启Nuxt开发服务,确保新的环境变量生效。

调整完成后,无论是页面刷新还是客户端路由跳转,全局中间件都会正确读取维护模式状态并执行对应的重定向逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:52:28