Как я могу регистрировать части этих запросов GET json - PullRequest
0 голосов
/ 16 апреля 2020

Вот код, который я написал, пытаясь установить переменную для каждого предмета одежды в ответе.

const rp = require("request-promise-native");
const Logger = require("../tools/Logger");

class Supreme {
  async getInfo() {
    const options = {
      method: "GET",
      uri: "https://www.supremenewyork.com/mobile_stock.json",
      headers: {
        "user-agent":
          "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; nl-nl) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5",
        "content-type": "application/x-www-form-urlencoded",
        accept:
          "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "accept-encoding": "gzip,deflate,br",
      },
      resolveWithFullResponse: true,
      gzip: true,
    };

    try {
      let res = await rp(options);
      this.shirts = res.body.shirts.name;
      console.log(this.shirts);
    } catch (err) {
      Logger.error("Failed to get");
      return undefined;
    }
  }
}

const main = async () => {
  const supreme = new Supreme(
    "https://www.supremenewyork.com/mobile_stock.json"
  );

  let checkoutSucc = await supreme.getInfo();
  if (checkoutSucc) {
    Logger.logEventSuccess("Got info");
  }
};

main();

Ответ, который я получаю на запрос, такой же, как http://www.supremenewyork.com/mobile_stock.json, и для каждого предмета одежды я хочу установить переменную, которую я могу просто написать console.log(someVar) и я получаю ERROR : TypeError: Cannot read property 'name' of undefined


Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Как видите, объект json имеет следующую схему (пример):

{
  "unique_image_url_prefixes": [],
  "products_and_categories": {
    "Shirts": [
      {
        "name": "Bowling Zip S/S Shirt",
        "id": 6599,
        "image_url": "//d17ol771963kd3.cloudfront.net/185441/ca/yHl3_5v9a-A.jpg",
        "image_url_hi": "//assets.supremenewyork.com/185441/rc/yHl3_5v9a-A.jpg",
        "price": 1870000,
        "sale_price": 0,
        "new_item": true,
        "position": 9,
        "category_name": "Shirts"
      },
      ...
    ]
  },
  ...
  "release_date": "04/11/2020",
  "release_week": "7SS20"
}

У него нет свойства с именем shirts на первом уровне объекта. Я думаю, что вы хотите получить доступ к массиву Shirts, если оно истинно, то Shirts является массивом, и массив не будет содержать свойство name, вам нужно l oop через все элементы массива чтобы получить их name.

...
let res = await rp(options);
const shirts = res.body.products_and_categories.Shirts; // products_and_categories is the firs level. Store in shirts variable
this.shirts = shirts.map(s => s.name); // get names of all shirts
console.log(this.shirts);
...
0 голосов
/ 16 апреля 2020

res.body вероятно содержит ответ в текстовом формате. Вы должны разобрать его до json, прежде чем сможете получить доступ к данным.

json = JSON.parse(res.body);
this.shirts = json.shirts.name;
...