NodeJ使用请求承诺来调用外部API,从响应主体中保存数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NodeJ使用请求承诺来调用外部API,从响应主体中保存数据相关的知识,希望对你有一定的参考价值。

我当前正在使用请求承诺,以便向smarty street API进行API调用以进行地址验证。我目前遇到的问题只是保存数据的返回正文,以便在请求之外使用它。将请求中的body保存到我的变量reBody的最简单方法是什么?

我肯定这是我想过的一个简单问题,因此任何帮助将不胜感激!随附的代码如下以及响应主体本身。

代码:

var resBody = null;

request({
    method: 'get',
    uri: url,
    headers: {
        'User-Agent': 'Request-Promise'
    },
    json: true 
})
.then(function (body) {
    console.log(body);
    return body
})
.catch(function (err) {
    console.log(err)
});

for (i in resBody){
    console.log(resBody[i].components);
}

响应:

[
  {
    input_index: 0,
    candidate_index: 0,
    delivery_line_1: '1 Campus Dr',
    last_line: 'Allendale MI 49401-9401',
    delivery_point_barcode: '494019401017',
    components: {
      primary_number: '1',
      street_name: 'Campus',
      street_suffix: 'Dr',
      city_name: 'Allendale',
      default_city_name: 'Allendale',
      state_abbreviation: 'MI',
      zipcode: '49401',
      plus4_code: '9401',
      delivery_point: '01',
      delivery_point_check_digit: '7'
    },
    metadata: {
      record_type: 'S',
      zip_type: 'Standard',
      county_fips: '26139',
      county_name: 'Ottawa',
      carrier_route: 'R099',
      congressional_district: '02',
      rdi: 'Commercial',
      elot_sequence: '0002',
      elot_sort: 'A',
      latitude: 42.97192,
      longitude: -85.89169,
      precision: 'Zip9',
      time_zone: 'Eastern',
      utc_offset: -5,
      dst: true
    },
    analysis: {
      dpv_match_code: 'Y',
      dpv_footnotes: 'AABB',
      dpv_cmra: 'N',
      dpv_vacant: 'N',
      active: 'Y',
      footnotes: 'N#'
    }
  }
]
答案

您必须将for循环移到then块内。另外,您可以像这样简化它:

let resBody = await request({
  method: 'get',
  uri: url,
  headers: {
    'User-Agent': 'Request-Promise'
  },
  json: true 
});

由于这是一个承诺,您可以等待它。要捕获错误,可以使用try..catch块。

以上是关于NodeJ使用请求承诺来调用外部API,从响应主体中保存数据的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 通过请求函数加入承诺

Spring Boot 从外部 API 返回 JSON 字符串

在节点中创建 REST API 时,如何将来自对外部网站的请求的 http 响应流式传输到原始 api 调用?

Mulesoft RAML - 在嵌套 XSD 文件上具有请求主体架构和响应主体架构的 Api 规范

REST API 响应主体相同但响应大小不同

使用requests_mock断言HTTP请求的主体