首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Get请求返回html代码而不是实际数据

Get请求返回html代码而不是实际数据
EN

Stack Overflow用户
提问于 2020-05-03 12:08:51
回答 2查看 652关注 0票数 1

我的应用程序是使用Vue和Express开发的。我的应用程序中有一个bug,它只在Heroku或生产环境中出现,而不是在本地主机或开发环境中出现。

我的应用程序已打开

Heroku:https://immense-refuge-12167.herokuapp.com/

github:https://github.com/powerseed/tabtracker_production

点击左上角的浏览器链接,控制台会打印一个名为response的对象,如下图所示:

是后台返回的响应,其data属性应该包含从PostgresSQL数据库返回的song对象。

但是,它的data属性包含HTML代码,其内容为:

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html>
<head>
  <meta charset=utf-8>
  <meta name=viewport content="width=device-width,initial-scale=1">
  <link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel=stylesheet>
  <title>TabTracker</title>
  <link href=/static/css/app.a56f85525b4e670fc7da4a6aaae97f55.css rel=stylesheet>
</head>
<body>
<div id=app></div>
<script type=text/javascript src=/static/js/manifest.2ae2e69a05c33dfc65f8.js></script>
<script type=text/javascript src=/static/js/vendor.eb5d49c013eada509bc8.js></script>
<script type=text/javascript src=/static/js/app.913b2b7edc7aedfb34fe.js></script></body></html>

我想知道为什么..。这个错误不会发生在本地主机上。在localhost上,输出如下所示,这是正确的。

这是我在客户端中的代码,它向后端发送get请求以获取song对象。

代码语言:javascript
运行
复制
.
.
.
      async mounted() {
        const response = (await api.getSongs(this.search))
        this.songs = response.data;
        console.log({response})
        console.log(this.songs)

api.getSongs()方法是:

(请忽略this.search参数,测试时忽略该参数)

代码语言:javascript
运行
复制
  const URL = "";

  getSongs(search){
    return axios.get(URL + "songs", {
      params:{
        search: search
      }
    });
  },

在beckend中,处理get请求并从DB检索的方法是:

代码语言:javascript
运行
复制
app.get("/songs", async function (req, res) {
    try{
        let allSongs = await Song.findAll({
            limit: 10
        })
        res.send(allSongs);
    }
    catch (e) {
        res.status(500).send({
            error: 'An error occurred when getting all songs. '
        })
    }
})

这很奇怪,因为它在本地主机上工作得很好,但在Heroku上会发生这个错误。

我认为数据库是正确连接的,因为注册和登录功能运行良好。

您只有在注册后才能登录。它们都是post请求。所以我猜问题只与get有关?

此外,下面是我的proxy配置:client/config/index.js

代码语言:javascript
运行
复制
module.exports = {
  dev: {
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
      '/': {
        target: 'http://localhost:8081',
      }
    },

提前感谢!

更新:

我尝试添加headers: {Accept: 'application/json'}headers: {'Content-Type': 'application/json'},但得到的响应总是text/html,这与我的本地主机不同,即使我没有添加'Content-Type': 'application/json',它也总是application/json

EN

回答 2

Stack Overflow用户

发布于 2020-05-03 12:39:59

express路由器有问题。对于任何GET请求,您的后端(Express)将使用首页内容进行响应。

尝试在浏览器中直接点击这些urls,并观察其行为:

代码语言:javascript
运行
复制
https://immense-refuge-12167.herokuapp.com/songs?search=
https://immense-refuge-12167.herokuapp.com/allBookmarks?userId=3

我尝试过不存在的url,它也被解析为200 OK。应该是404 Not found

代码语言:javascript
运行
复制
https://immense-refuge-12167.herokuapp.com/songs/invalid/url/test?search=
票数 1
EN

Stack Overflow用户

发布于 2020-05-03 13:44:05

您是否尝试过将accept标头添加到application/json?

代码语言:javascript
运行
复制
return axios
  .get(URL + 'songs', {
    headers: { Accept: 'application/json' },
    params: { 
        search: search 
    },
  })
  .then((response) => {
    console.log(response.data);
  })
  .catch((error) => {
    console.log('error ' + error);
  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61569512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档