如何在Nuxt插件中获取包含域名的完整URL?
Nuxt.js 预渲染场景下获取完整URL的可行方案
针对你使用nuxt generate预渲染静态站点、需要从域名提取国家标识的场景,可参考以下可落地的方案:
- 方案1:打包时按环境注入环境变量
因为预发、生产各个国家站点都是单独执行nuxt generate打包的,你可以直接在不同站点的打包脚本中配置对应环境变量,把当前站点的域名/国家标识提前注入。比如荷兰站打包时配置NUXT_PUBLIC_SITE_DOMAIN=www.test.nl、NUXT_PUBLIC_COUNTRY_CODE=nl,在插件中直接通过process.env.NUXT_PUBLIC_SITE_DOMAIN读取即可,不需要运行时动态获取域名。 - 方案2:客户端侧延迟读取
如果带国家参数的API调用不需要在预渲染阶段执行,可以在插件中加环境判断,等客户端水化完成后再读取window.location获取域名:
完全避开服务端无window对象、预渲染阶段请求头不生效的问题。// 插件内代码 if (process.client) { const fullUrl = window.location.href const domain = window.location.host // 拿到域名后再执行API调用逻辑 } - 方案3:托管层动态注入全局变量
如果你使用Nginx、CDN等托管服务,可以在请求返回静态HTML时,把当前访问的域名注入到页面的全局变量中。比如Nginx配置中插入如下逻辑:
插件中直接读取sub_filter '<head>' '<head><script>window.__CURRENT_DOMAIN__ = "$host";</script>'; sub_filter_once on;window.__CURRENT_DOMAIN__即可拿到当前域名。 - 方案4:调整站点结构适配路由读取
如果架构调整成本不高,可以把国家标识从域名转移到路径前缀,比如调整为www.test.com/nl/about的形式,直接通过route对象就能拿到国家标识,不需要处理域名相关逻辑,是兼容性最高的方案。
内容的提问来源于stack exchange,提问作者FonsVC
相关产品推荐
相关产品推荐

