访问对象内的数据

时间:2019-03-22 16:45:18

标签: javascript node.js

app.get('/profile/:id', function(req, res){
var options = { method: 'GET',
    url: 'https://api.favoriot.com/v1/streams?max=1',
    headers: 
    { 'cache-control': 'no-cache',
        'content-type': 'application/json',
        'apikey': 'api key' } };

    request(options, function (error, response, body) {  
            res.render('profile', {data:body});
    console.log(body)
    });
});

当我在上面运行代码时,我会得到以下数据:

  

{“ debugCode”:null,“ statusCode”:200,“ numFound”:1,“ results”:[{“ user_id”:“ xxx510”,“ stream_created_at”:“” 2019-03-05T16:13:01.982 Z“,” stream_developer_id“:” f8b8fcb9-6f3e-4138-8c6b-d0a7e8xxxxx @ xxxx510“,” device_developer_id“:” raspberryPIxx @ xxx510“,” data“:{” distance“:” 12.4“,” status“:” 1 “}}]}

如何使其仅显示状态?

2 个答案:

答案 0 :(得分:0)

1)在此示例中,没有中间件...您只是在打电话获取一些数据。

2)statusbody.results[0].data.status中可用,因此只需使用它而不是整个body对象

答案 1 :(得分:0)

AFAIK这样的代码没有问题。您确定在主体的数据字段中获得了距离和状态,还是预期的输出?通过在其API playground上设置您的API密钥来尝试。我已经通过请求模块使用ES6标准重写了代码,或者您可以使用request-promise-native

function requestPromisified(options) {
  return new Promise(function(resolve, reject) {
    request(options, function(error, res, body) {
      if (!error && res.statusCode == 200) {
        resolve(body);
      } else {
        reject(error);
      }
    });
  });
}

app.get("/profile/:id", async (req, res) => {
  const options = {
    method: "GET",
    url: "https://api.favoriot.com/v1/streams?max=1",
    headers: {
      "cache-control": "no-cache",
      "content-type": "application/json",
      apikey: "api key"
    }
  };
  try {
    const body = await requestPromisified(options);
    console.log(body);
    res.render("profile", { data: body });
  } catch (error) {
      res.status(400).send('Unable to find a profile')
  }
});