【问题标题】:Vue/MySQL Database not appearing online, but is locally?Vue/MySQL 数据库未在线出现,但在本地?
【发布时间】:2021-11-15 09:30:47
【问题描述】:

目前,当我在本地运行我的应用程序时,一切正常。但是,当我将所有内容推送到 Heroku 服务器时,连接到 MySQL 数据库的页面内容不会在没有任何 CORS 错误或在 Chrome 开发工具中执行 fetch 调用时出现任何错误。页面本身会加载,但在页眉之后只是空白。

我已连接到 ClearDB 并且已部署后端。我可以通过 Axios 查看我想获得的所有路线,但与 Heroku 上的不同。这是我在已设置的 Vue 组件中的一个 API 调用

    getTeams() {
      const headers = [{ "Content-Type": "application/json" }, { "Access-Control-Allow-Origin": "https://the-fame-of-honor.herokuapp.com" }];
      axios.get("https://fame-of-honor-server.herokuapp.com/api/teams", { headers })
        .then((response) => {
          this.teams = response.data;
          console.log("Teams", response.data);
        })
        .catch((e) => {
          console.log("error", e);
        });
    },

如果有帮助,这里是后端和前端的代码。

Server Code(节点、Express、MySQL)

Front End Code (Vue)

以下是我执行的获取请求,以查看是否发生任何错误,但响应已完成,但仍然没有数据通过那里。所以我觉得这很奇怪?

在这方面的任何帮助将不胜感激。

【问题讨论】:

  • 您是否确定已将内容迁移到部署的数据库?在黑暗中拍摄,因为不清楚您是否使用本地数据库。无论如何,如果你在本地使用 curl 会发生什么?
  • 当我进行本地 curl 调用时,所有数据都会从我尝试过的 API 路由返回。我正在使用本地数据库并将其与 ClearDB 连接,是的!当我通过 Workbench 检查本地部署的数据库时,一切都会显示出来。
  • 麻烦,我想我可以自己检查一下。它也适用于此。
  • 添加了一个我用 Axios 设置的组件,如果这对以后的任何问题都有帮助的话
  • 承诺没有实现——只有 cors 请求是。

标签: mysql vue.js express server


【解决方案1】:

如果您查看已部署应用程序的网络检查器(如果您不希望它链接,则不链接)它甚至不会尝试来获取数据:它会因错误而停止TypeError: r.toUpperCase is not a function。它甚至没有尝试获取(任何获取错误都是另一回事)。

查看代码,抛出的错误(可能是也可能不是整体问题)很可能归结为作为数组而不是单个对象传递的标头。 (见this question)具体来说,你应该像这样传递标题:

  methods: {
    getTeams() {
      const headers = { "Content-Type": "application/json" };
      axios.get("https://fame-of-honor-server.herokuapp.com/api/teams"), headers)
        .then((response) => {
          this.teams = response.data;
          console.log("Teams", response.data);
        })
        .catch((e) => {
          console.log("error", e);
        });
    },
  },

如果您需要多个标题,只需将它们放在对象中即可。请注意,您不应该发送Access-Control-Allow-Origin:这是由后端发送的,以响应浏览器将自动添加的Origin标头。

现代js也可以这样写,我个人认为比较容易阅读:

try {
  const { data } = await axios.get(url, headers);
  this.teams = data;
} catch(e) {
  console.error(e)
}

【讨论】:

  • 我确实看到了这个。它引用的行是错误的控制台日志,所以我不确定这一点。
  • 因为您捕获了错误并记录下来!但如果你把它拿出来,你会看到它在其他地方发生:错误 TypeError: name.toUpperCase is not a function at processHeader (normalizeHeaderName.js?c8af:7)
  • 嗯嗯嗯嗯好的。这可能只是让我更加困惑为什么会发生这种情况
  • 已更新,但 vue 今晚不玩球,所以我暂时离开它
  • 这就是标题似乎是一个数组的问题!谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多