似乎无法从SeatGeek API获取数据

时间:2017-12-13 22:12:53

标签: javascript api express

所以当用户使用bootstrap navigation API输入表演者的名字时,我正在尝试检索数据。目前,我只是在我的URL中输入查询字符串以确保我的密钥正常工作。所以这个:

https://api.seatgeek.com/2/events?performers.slug=new-york-mets&client_id=MY_CLIENT_ID

工作,我可以获得有关纽约大都会队赛事信息的JSON。

示例:

  "meta": {
    "total": 192,
    "per_page": 10,
    "page": 1,
    "took": 2,
    "geolocation": null
  },
  "events": [ARRAY OF EVENTS]

服务器端和提取数据:

在我的表单中,我正在向/events发送POST请求:

app.post('/events', function(req, res) {
  let band = req.body.bandName;
  band = band.split(' ').join('-')

  fetch(`https://api.seatgeek.com/2/events?performers.slug=${band}&client_id=MY_CLIENT_ID`)
    .then(function(data){
      res.json(data);
    }).catch(function(error){
      console.log(error);
    });
});

当我点击POST请求时,我得到不同的数据。我甚至不完全确定这是什么:

{
  "url": "https://api.seatgeek.com/2/events?performers.slug=new-york-mets&client_id=OTk1Mzg2MXwxNTEzMTkwMDUyLjI3",
  "status": 200,
  "statusText": "OK",
  "headers": {
...
 "body": {
"_readableState": {
  "objectMode": false,
  "highWaterMark": 16384,
  "buffer": {
    "head": null,
    "tail": null,
    "length": 0
  }, etc...

我的提取请求是否错误?

1 个答案:

答案 0 :(得分:0)

这是您从fetch then获得的Response对象。

我们的想法是Response是数据的,要实际访问从API返回的数据,您需要阅读Response流到完成。

要访问实际提取的JSON,您需要访问Body.json,这是一种可用于响应的方法,因为它们实现了Body接口:

fetch(`https://api.seatgeek.com/2/events?performers.slug=${band}&client_id=MY_CLIENT_ID`)
  .then(function(response) {
    return response.json();
  }).then(function(json) {
    res.json(json);
  }).catch(function(error) {
    console.log(error);
  });

注意新的thenresponse.json()读取Response流完成,并实际返回一个在流耗尽时使用JSON解析的promise。第一个then等待JSON,之后,在第二个then中将从SeatGeek获取的JSON发送给您自己的API用户。