【问题标题】:Is there a way for filer API endpoint JSON response?有没有办法让文件管理器 API 端点 JSON 响应?
【发布时间】:2019-06-02 09:17:38
【问题描述】:

我有一个使用基本身份验证的外部 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 未定义。不知道我在做什么才能得到“未定义”的结果。

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:
    • 您声明了一个 数组 var volumeInfo = []; 但您将其用作 map res.send(volumeInfo["content"]);
    • T要访问数组中的元素,您需要一个索引(整数)。试试res.send(volumeInfo[0].content);

    【讨论】:

    • 页面返回空白。 console.log(volumeInfo[0].content) 导致“未定义”。奇怪的是,如果我将 JSON 内容复制到 chrome 的控制台中,我将使用点符号来钻取对象。
    • 在访问第一个元素之前,您可能需要检查数组volumeInfo 是否有任何项目
    • 谢谢,我检查了返回的 typeof,它看起来是一个巨大的字符串。不是对象。
    • 我更改了以下内容,现在可以使用了。上一篇: var vols = body;新:var vols = JSON.parse(body);
    • 很高兴它有帮助!
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多