Передать идентификаторы из запроса POST в отдельную конечную точку - PullRequest
0 голосов
/ 29 декабря 2018

Я учу себя Nodejs и пытаюсь заполнить страницу списком часов открытия и закрытия близлежащих предприятий из API Yelp.Я создал POST-маршрут к своей странице в Express, вызывая API Yelp с помощью клиента Yelp Fusion.Я могу собрать массив идентификаторов, которые должны использоваться в другой конечной точке, чтобы получить часы работы, однако я продолжаю получать ошибки TOO_MANY_REQUESTS_PER_SECOND, когда делаю это, несмотря на установку ограничения в запросе.

Server.js

var express = require("express");
var app = express();
var yelp = require("yelp-fusion");
var bodyParser = require("body-parser");

app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({extended: true}));
app.set("view engine", "ejs");
let client = yelp.client("API_HIDDEN");

app.get("/", function(req,res){
    res.render("landing");
});

///Initial request made to obtain business ids
app.post("/", function(req, res){
    client.search({
        term: 'cafe',
        location: 'Oakland',
        limit: 20
    }).then(response => {
        var ids = [];
        var businesses = response.jsonBody.businesses;
        var idName = businesses.map(el => {
            ids.push(el.id);
        });

        // request separate endpoint, passing ids from the ```ids```array
        for(var x = 0; x < businesses.length; x++){
            client.business(ids[x]).then(response => {
                console.log(response.jsonBody.hours);
            })}.

        res.render("search");
    }).catch(e => {
        console.log(e);
    });
})

app.listen(3000);

Я пытался вызвать client.businesses[id] как внутри, так и вне цикла for, но это также привело к ошибкам.Я запутался в поведении этого, так как я делаю только 20 звонков, что намного ниже минимума, но также и то, как, возможно, передать идентификаторы, если не для массива, поскольку у меня закончились идеи.Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 29 декабря 2018

Распределите вызовы API со временем.

var delay = 1.1 * 1000; // 1.1 seconds in milliseconds  
for(var x = 0; x < businesses.length; x++){
  setTimeout(function(i){
      client.business(ids[i]).then(response => {
      console.log(response.jsonBody.hours);
      });  
  },delay*x,x);
}
...