1

我必须从我的Gridsome应用程序中的 URL 读取查询参数。我有 2 个 URL 案例,其中一个是在我的应用程序中访问时,我的query密钥是空对象。{}this.$route.query

案例 1: -在查询参数开始之前https://app.com/forms/ads/?param1=one&param2=two有一个斜杠。/

案例 2: https://app.com/forms/ads?param1=one&param2=two -/在查询参数之前没有斜线。

当我访问this.$route.querylocalhost两种情况时,我得到了param1and的值param2

我的问题是当我将它推向生产时,案例 2返回一个空对象{}

storeUtmData() {
  const utmSource = this.$route.query.utm_source;
  const utmMedium = this.$route.query.utm_medium;
  console.log(this.$route.query); // return {}
  ...
},
4

1 回答 1

0

case1在文件夹“ https://app.com/forms/ads/ ”中的“index.html”中请求,而对于 case2,当您使用 gridsome 构建项目进行生产时,静态服务网页上将不存在任何资源(如果你没有任何真正特殊的基础设施)。由于该资源不存在,我的猜测是您使用“this.$route”访问的 vue-router 在这种情况下仅包含一个空对象。

为什么它在本地工作?

我可以想象在本地开发环境中,express 将资源“广告”视为一条路线,而在现场只有一个包含和 index.html 的文件夹,该文件夹由网络服务器提供服务。路由与由 webserver 静态服务的文件夹的区别在于,来自 nodejs express 应用程序的路由实际上是直接触发应用程序逻辑执行,而 webserver 主要传输文件夹中的静态文件。按照惯例,在 URL 的末尾使用斜杠访问文件夹。

如需更多信息,请阅读以下部分: https://en.wikipedia.org/wiki/Clean_URL#Structure https://en.wikipedia.org/wiki/Clean_URL#Implementation

我希望这能回答你的问题。

为什么需要 case2 才能在生产中工作?至少在您的应用程序中如何链接到某个 URL 应该在您的控制之下。

干杯,电子手表

于 2020-01-26T17:36:06.267 回答