有没有办法处理Filer API端点JSON响应?

时间:2019-01-07 17:20:05

标签: javascript node.js

我有一个使用基本身份验证的外部API端点,我正在尝试从JSON响应中查找特定的键和/或值。

结果:

hrefsOnly返回一个包含两个项目的数组。

[
"https://192.168.254.133/api/json/v2/types/volumes/1",
"https://192.168.254.133/api/json/v2/types/volumes/3"
]

调用hrefsOnly [1]显示以下JSON响应:

{ "content": {
    "ancestor-vol-name": null,
    "small-io-alerts": "disabled",
    "last-refreshed-from-obj-name": null,
    "small-iops": "0",
    "wr-latency": "1738",
    "obj-severity": "information"
}}

volumeInfo在我的代码中未定义如下:

const express = require('express');
const app = express();
const request = require("request");
const bodyParser = require('body-parser');

const auth = 'YWRtaW46WHRyZW0xMA==';

//Get Volume api endpoint values
var getVols = { 
  method: 'GET',
  url: 'https://192.168.254.133/api/json/v2/types/volumes/',
  headers: 
  { 
    'cache-control': 'no-cache',
    Accept: 'application/json',
    'Content-Type': 'application/json',
    Authorization: `Basic ${auth}` 
  } 
};

//Get above api endpoint data
var volsData = {
  method: 'GET',
  url: 'https://192.168.254.133/api/json/v2/types/volumes/1',
  headers: 
  { 
    'cache-control': 'no-cache',
    Accept: 'application/json',
    'Content-Type': 'application/json',
    Authorization: `Basic ${auth}` 
  } 
};

var hrefsOnly = [];
var volumeInfo = [];

//GET request to parse hfref data only
request(getVols, function (error, response, body) {
    var data = JSON.parse(body);
    if (error){
      console.log('error: ', error);
    } else {
      for(var i = 0; i < data["volumes"].length; i++){
        hrefsOnly.push(data["volumes"][i].href);
      }
    }
});

app.get('/url', (req, res, next) => {
    res.send(hrefsOnly);
});

// GET Volumes JSON response
request(volsData, function (error, response, body) {
    var vols = body;
    if (error){
      console.log('error: ', error);
    } else {
      for(var elem in vols){
        volumeInfo.push(vols);
      }
    }
});

app.get('/volume', (req, res, next) => {
  console.log(volumeInfo["content"]);
  res.send(volumeInfo["content"]);
});

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
app.listen(3000, () => {
    console.log("Server running on port 3000");
});

我希望当我访问页面localhost:3000 / volume时从API返回内容部分。该页面显示为空白。 console.log(volumeInfo [1])显示JSON数据,但是volumeInfo [1] .content未定义。不知道该怎么做才能得到“未定义”的结果。

1 个答案:

答案 0 :(得分:0)

  • 您声明了 array var volumeInfo = [];,但您将其用作 map res.send(volumeInfo["content"]);
  • T要访问数组内的元素,您需要一个索引(整数)。尝试使用res.send(volumeInfo[0].content);