【问题标题】:http request responds with html instead of jsonhttp 请求以 html 而不是 json 响应
【发布时间】:2016-09-09 03:22:49
【问题描述】:

我已经进行了一些 vimeo api 调用来获取视频,但是当我在服务器上执行获取请求时,它会使用该路径上的 html 而不是来自服务器的数据进行响应。我也在使用 angular-client-side-auth (https://github.com/fnakstad/angular-client-side-auth)。我是新手,所以我很难理解为什么会发生这种情况。

server.js

app.get('/api/mostviewed', function (req, res) {
  MostViewed.find({}, { _id: 0, iframe: 1 }, function (err, docs) {
    res.json(docs);
  });
});

在客户端身份验证的 routes.js 里面有这个,这导致了这一切(这个文件在服务器端):

{
    path: '/*',
    httpMethod: 'GET',
    middleware: [function(req, res) {
        var role = userRoles.public, username = '';
        if(req.user) {
            role = req.user.role;
            username = req.user.username;
        }
        res.cookie('user', JSON.stringify({
            'username': username,
            'role': role
        }));
        res.render('index');
    }]
}

我该如何解决这个问题?我想保持路径:'/*',或者在保持功能相似的同时改变它,这样我就可以从服务器获取我的数据。还是有其他方法可以解决这个问题?

编辑: 解决方案

{
   path: '/api/mostviewed',
   httpMethod: 'GET',
   middleware: [Video.getmostviewed]
},

在 Video.js 中我做了这个:

getmostviewed: function(req,res){
    MostViewed.find({}, { _id: 0, iframe: 1 }, function (err, docs) {
    res.json(docs);
  });
}

【问题讨论】:

  • 可以给res.render('index');添加条件
  • 能否详细说明这一点,最好举个例子?

标签: javascript angularjs json node.js


【解决方案1】:

在您的情况下,客户端找不到与/api/mostviewed 对应的逻辑,因此到达/* 并显示html 而不是json

可能的解决方案

/*之前添加如下类似逻辑

{
   path: '/api/*',
   httpMethod: 'GET',
   middleware: [function(req, res) {  // sample middleware logic
       var role = userRoles.public, username = '';
       if(req.user) {
          role = req.user.role;
          username = req.user.username;
       }
       res.cookie('user', JSON.stringify({
        'username': username,
        'role': role
       }));
   }]
},

【讨论】:

  • 我会接受这个作为答案。谢谢你指引我正确的方向。以我的方式编辑。
猜你喜欢
  • 2023-04-05
  • 2018-11-03
  • 2015-06-15
  • 1970-01-01
  • 2017-03-10
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多