【问题标题】:request-promise returns undefined but existsrequest-promise 返回未定义但存在
【发布时间】:2017-04-26 15:42:25
【问题描述】:

尝试通过 request-promise 发出请求,但无法正常工作。

请参阅下面的评论。

有人可以向我解释一下这个 PiA 吗?

提前致谢

var todayOptions = { uri: `http://mlb.mlb.com/gdcross/components/game/mlb/year_${year}/month_${month}/day_${day}/master_scoreboard.json`, 
                     simple: false, 
                     resolveWithFullResponse: true
};

rp(todayOptions)
  .then(function (response){
    console.log(response.body); //RETURNS BODY
    console.log(response.body.data); //RETURNS UNDEFINED EVEN THOUGH IT EXISTS
 })
  .catch(function(error){
    console.log(error);
  });

【问题讨论】:

标签: javascript node.js request httprequest request-promise


【解决方案1】:

您需要将json 选项设置为true:

var todayOptions = { uri: `http://mlb.mlb.com/gdcross/components/game/mlb/year_${year}/month_${month}/day_${day}/master_scoreboard.json`, 
                     simple: false, 
                     resolveWithFullResponse: true,
                     json: true
};

【讨论】:

  • 也可以,完全忘记了这个选项。在 request-promise 文档中从未提到过,但我在使用 request 时总是使用它;事实上,我总是使用请求,但我现在必须使用 forEach + request,因此最终得到了承诺。我讨厌承诺。
  • 我也不知道这个选项。很高兴知道。,投票。
【解决方案2】:

我敢打赌,response.body 是一个字符串化的 JSON 对象。尝试解析它。 request-promise 有时会返回一个字符串化的对象。

console.log(JSON.parse(response.body).data);

【讨论】:

    【解决方案3】:

    如果这仍然不适合您,因为它不适合我,请尝试将其添加到您的选项中:

    编码:'utf8'

    这为我解决了一切问题。您甚至不必弄乱 json.parse 或 json.stringify 复合。如果您的选项中已经有 json: true,则响应已经是一个 json 对象。

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 2017-10-31
      • 2020-10-03
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 2021-06-03
      相关资源
      最近更新 更多