所以当用户使用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...
我的提取请求是否错误?
答案 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);
});
注意新的then
。 response.json()
读取Response
流完成,并实际返回一个在流耗尽时使用JSON解析的promise。第一个then
等待JSON,之后,在第二个then
中将从SeatGeek获取的JSON发送给您自己的API用户。