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

Quasar Vue SSR项目获取客户端URL的window.location替代方案咨询

Quasar SSR 环境获取客户端访问地址的解决方案

Quasar 针对 SSR 场景内置了对应上下文能力,无需直接调用 window 对象即可安全获取访问地址,分两个执行阶段处理即可:

服务端渲染阶段(Node 侧执行)

SSR 服务端接收请求时会注入 ssrContext 全局上下文,你可以直接从该对象的请求头中提取所需的 host 信息,推荐在 boot 文件中完成取值并存入状态管理:

// 示例:src/boot/init-env.js
import { boot } from 'quasar/wrappers'

export default boot(({ ssrContext, store }) => {
  // 仅在服务端执行时取值
  if (process.env.SERVER) {
    // 直接获取格式为 localhost:8080 的 host 信息
    const accessHost = ssrContext.req.headers.host
    // 存入你的Pinia/Vuex状态管理仓库即可
    store.commit('common/setAccessHost', accessHost)

    // 如需完整origin地址,可拼接协议获取
    const accessOrigin = `${ssrContext.req.protocol}://${accessHost}`
    store.commit('common/setAccessOrigin', accessOrigin)
  }
})

客户端运行阶段(浏览器侧执行)

进入客户端 hydration 之后的阶段可以安全调用 window,仅需加环境判断避免触发服务端执行时报错即可:

// 封装为公共工具函数示例
export const getAccessHost = () => {
  if (process.env.CLIENT) {
    return window.location.host
  }
  // 服务端场景优先返回状态管理中已存储的取值
  return useCommonStore().accessHost
}

注意事项

  • 不要在组件 <template> 标签、setup 顶层无判断直接调用 window 相关属性,会直接触发 SSR 阶段执行报错
  • 调用 API 时需要携带地址信息的场景,优先取状态管理中服务端预存的值,避免两端取值不一致导致 hydration 不匹配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:39:03