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,从响应主体中保存数据的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 从外部 API 返回 JSON 字符串
在节点中创建 REST API 时,如何将来自对外部网站的请求的 http 响应流式传输到原始 api 调用?