Работает нормально для одного звонка, но останавливается, когда я нажимаю обновить - PullRequest
0 голосов
/ 26 апреля 2019

Я делаю два вызова API для API Zomato: 1) Сначала я ввожу название города от пользователя и получаю параметры entity_Id и entity_type из API.2) Я использую entity_Id и entity_type и выполняю еще один вызов API для получения данных о ресторанах из API.

Этот код работает один раз, т. Е. Я открываю целевую страницу, вводим название города и показываю, что я хочу правильно.

Но если я нанесу ответный удар и войду в другой город, я столкнусь со следующей ошибкой, и мое приложение вылетает.

Не знаю, почему это происходит.


var options = {

    url : "https://developers.zomato.com/api/v2.1/",
    headers : {
         "user-key" : "//myAPIKeyHere"
     }
};

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

app.get("/restaurants",function(req,res){
    console.log(req.query.search);
    var cityName = req.query.search;

    var cityArray = cityName.split(" ");
    var cityAdd = cityArray[0];
    if(cityArray.length>1){
        for(var i =1;i<cityArray.length;i++){
            cityAdd = cityAdd+"%20"+cityArray[i]
        }
    }

    var ans= new Array();
    options.url = options.url + "locations?query="+cityAdd;

    request(options,function(error, response, body) {
        if(!error && response.statusCode == 200){
            var data = JSON.parse(body);

            ans.push(data["location_suggestions"][0]["entity_id"])
            ans.push(data["location_suggestions"][0]["entity_type"])

            // res.send(ans);
            options.url = "https://developers.zomato.com/api/v2.1/search?entity_id="+ ans[0]+ "&entity_type="+ans[1]+"&sort=rating&order=desc";
            request(options,function(error2,response2,mainBody){
                if(!error2 && response2.statusCode==200){
                    var newdata = JSON.parse(mainBody);
                    res.render("results.ejs",{data:newdata});
                }
                else{
                    console.log(error2);
                    res.send("Error Occured");
                }
            });

        }
        else{
            ans.push(0)
            ans.push(0)
            console.log(error)
            console.log("EERRRRRRRRRRRR")
            return ans

        }
    })
});


ОШИБКА:

/home/ubuntu/environment/zomato/app.js:40
            ans.push(data["location_suggestions"][0]["entity_id"])
                                                 ^

TypeError: Cannot read property '0' of undefined
    at Request._callback (/home/ubuntu/environment/zomato/app.js:40:50)
    at Request.self.callback (/home/ubuntu/environment/zomato/node_modules/request/request.js:185:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:191:7)
    at Request.<anonymous> (/home/ubuntu/environment/zomato/node_modules/request/request.js:1161:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)
    at IncomingMessage.<anonymous> (/home/ubuntu/environment/zomato/node_modules/request/request.js:1083:12)
    at IncomingMessage.g (events.js:292:16)
    at emitNone (events.js:91:20)

Обычно это должно работать столько раз, сколько я обновляю для 1000 вызовов API.день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...