【问题标题】:swagger api can't send array as responseswagger api无法发送数组作为响应
【发布时间】:2017-10-25 11:13:32
【问题描述】:

我正在学习 Node js,并且我有一个 node swagger api。我正在尝试根据 2 个输入团队检索游戏统计数据。我用这个函数查询mongodb:

    function getTeamVsTeamRecord(req, res) {
      var team1 = req.swagger.params.team1.value;
      var team2 = req.swagger.params.team2.value;
      stats.find({
        game: /2016/,
        $or:[
          {'data.home.abbr': team1, 'data.away.abbr': team2},
          {'data.away.abbr': team1, 'data.home.abbr': team2}
        ]}).toArray(function(err, results){
        if (err) {
          console.error(err);
          res.status(500).json({error: 'error.code', message: 'An error happened in the server !'})
        }
        if (typeof results !== 'undefined' && results.length > 0) {
          console.log("search returned: " + results.length + " results");
          console.log(results);
          res.json(results);
        }
        else {
          res.status(500).json({error: 'error 1', message: 'search returned nothing'})
        }
      });
    }

结果对象的输出如下所示:

[ { _id: 59ea18c21fff646c417b078c,
    game: '2016100201',
    data: 
     { home: [Object],
       away: [Object],
       drives: [Object],
       scrsummary: [Object],
       weather: null,
       media: null,
       yl: '',
       qtr: 'Final',
       note: null,
       down: 0,
       togo: 0,
       redzone: true,
       clock: '00:34',
       posteam: 'ATL',
       stadium: null },
    nextupdate: 246 },
  { _id: 59ea18c61fff646c417b0bac,
    game: '2016122401',
    data: 
     { home: [Object],
       away: [Object],
       drives: [Object],
       scrsummary: [Object],
       weather: null,
       media: null,
       yl: '',
       qtr: 'Final',
       note: null,
       down: 0,
       togo: 0,
       redzone: true,
       clock: '00:44',
       posteam: 'CAR',
       stadium: null },
    nextupdate: 318 } ]

如您所见,我在此查询中检索了 2 组游戏统计信息。我的问题是模式验证失败,因为 swagger 需要 json 语法。我尝试了 JSON.stringify,这导致了错误的数组错误。我可以发送成功

res.json = results[0].data 

作为响应,但这仅在数组中有 1 个项目时有效。有没有办法将整个数组作为 json 响应发送?

【问题讨论】:

    标签: arrays json node.js mongodb swagger


    【解决方案1】:

    我最终创建了一个对象“o”并将数组中的结果添加到该对象,如下所示:

    function getTeamVsTeamRecord(req, res) {
      var team1 = req.swagger.params.team1.value;
      var team2 = req.swagger.params.team2.value;
      var year = req.swagger.params.year.value;
      var o = {};
      stats.find({
        game: {$regex: ".*" + year + ".*"},
        $or:[
          {'data.home.abbr': team1, 'data.away.abbr': team2},
          {'data.away.abbr': team1, 'data.home.abbr': team2}
        ]}).toArray(function(err, results){
        if (err) {
          console.error(err);
          res.status(500).json({error: 'error.code', message: 'An error happened in the server !'})
        }
        if (typeof results !== 'undefined' && results.length > 0) {
          for (var i = 0; i < results.length; i++) {
            var game = "res" + i;
            o[game] = results[i];
          }
          res.json(o);
        }
        else {
          res.status(500).json({error: 'error 1', message: 'search returned nothing'})
        }
      });
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 2020-08-12
      • 2016-08-31
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2013-07-05
      相关资源
      最近更新 更多