节点JS请求外部API并将其发送回客户端AJAX

时间:2019-04-18 00:51:48

标签: javascript node.js json ajax api

因此,我有一个Node.js服务器,该路由可以完成一件事。在客户端上单击按钮时,它会转到此处并从外部API提取数据。

app.get('/ajaxcall', function(req, res) {
const options = {
    url: 'hidden url',
    method: 'POST',
};

request(options, function(err, request, body) {
    if (err) {
        request.send('There was an error with fetching API');
    }
    else {
        console.log(res.statusCode);
        return res.end(JSON.stringify(body));
    }
});
});

然后我要使用该位,并从服务器获取此数据。

$(document).ready(function(){
$('#searchButton').click(function(event){
event.preventDefault()
$.ajax({
  type: 'GET',
  url: '/ajaxcall',
})
.done(function(result){
  let data = jQuery.parseJSON(result);
  console.log(data)
  console.log(data[0].formatted_address)
})
.fail(function(xhr, status, error){
  console.log(error)
})
.always(function(data){})
})
})

问题是console.log(data)会将所有内容输出到控制台,但是console.log(data.[0].formatted_address)输出未定义。

我正在尝试从返回的JSON中获取数据,因此可以将其显示在网站上。谁能告诉我为什么console.log(formatted_address)在客户端不起作用,而在服务器端起作用?有没有办法遍历这个JSON对象并选择我需要的位?

这是JSON的外观 JSON screenshot

2 个答案:

答案 0 :(得分:0)

如果您发布的JSON是在前端的data变量中反序列化的内容,则似乎data是一个包含results字段的JSON对象,数组而不是data对象本身就是一个数组。

尝试类似data.results[0].formatted_address

答案 1 :(得分:0)

这里是一个示例,说明如何使用forEach数组函数将.done函数更改为循环某些数据。

.done(function(result){
  let data = jQuery.parseJSON(result);

  data.results.forEach(function(result) {
        console.log(result.formatted_address);
        console.log(result.geometry.location.lat, result.geometry.location.lng);
        console.log(result.icon);
    });
})