【问题标题】:How to access data from "Passthrough" object returned after API call?如何从 API 调用后返回的“Passthrough”对象访问数据?
【发布时间】:2021-01-25 12:43:48
【问题描述】:

我正在向以下 url 发送一个带有 node-fetch 的 fetch 请求:http://fantasy.premierleague.com/api/bootstrap-static/ 以取回一些 JSON 数据。在浏览器中访问 URL,或者使用 postman 发送 get-request 都会返回预期的 JSON 数据。

但是,当我从节点发送请求时,我得到了一个我不知道如何从中提取数据的对象(下图)。

我对节点不是很有经验,但我之前已经成功调用过 API。通常使用 response.json() 或 JSON.parse(response) 或 response.body 或 response.toString() 或其中的某些组合来解析响应对我有用。我对缓冲区和流有一半熟悉,但没有信心,解决方案可能与这些有关,但我似乎无法弄清楚。

根据我的尝试,我会得到一些不同的错误和对象。我尝试过使用 fetch 和来自节点的普通 http 请求。

这个电话:

返回:

如果我执行 JSON.parse(response),我会收到以下错误:

Response.body 看起来像这样:

【问题讨论】:

  • 这能回答你的问题吗? Using Fetch API to Access JSON
  • 不幸的是,没有。它返回一个“UnhandledPromiseRejectionWarning”错误,抱怨“无效的 json 响应正文”和“意外的 JSON 输入结束”。然而,在邮递员中,“Content-Type”标头实际上是“Application/json”。无论如何,谢谢。

标签: javascript node.js json fetch pass-through


【解决方案1】:

Fetch 返回一个响应流,如similar question 的答案中所述 您可以读取块中的数据并将块添加到数组中,然后对该数据执行任何您需要执行的操作。更简单的方法是使用 npm request 包。这是一个例子。

const request = require('request');
let options = {json: true};

const url = 'http://fantasy.premierleague.com/api/bootstrap-static/'
request(url, options, (error, res, body) => {
    if (error) {
        return  console.log(error)
    };

    if (!error && res.statusCode == 200) {
        console.log(body);
        // do something with JSON, using the 'body' variable
    };
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多