Что происходит и почему
Когда вы достигаете предела скорости, установленного удаленным веб-сайтом, он возвращает строку "Слишком много запросов. Пожалуйста, повторите попытку позже."
Как вы могли бы сказать, это недопустимый JSON.Если вы попытаетесь JSON.parse()
этой строки, вы получите ошибку.
let str = "Too many requests. Please try again later.";
console.log(JSON.parse(str));
Вместо этого вы должны сделать две вещи:
Считать response.statusCode
Сначала проверьте, какой код состояния отправляется при успешных запросах.,Допустим, это 200. Затем вы можете добавить блок, который обрабатывает коды состояния, отличные от 200:
Request.get(url, (error, response, body) => {
if(error) {
return console.dir(error);
}
if(response.statusCode != 200){ //200 is the status code on successful requests in this case
return console.log(response.statusCode+" "+response.body);
}
var object = JSON.parse(body);
});
Оттуда вы можете даже проверить, какой код состояния отправляется в ответах «Слишком много запросов».,Давайте предположим, что это 429, как указано RFC 6585 .
Request.get(url, (error, response, body) => {
if(error) {
return console.dir(error);
}
if(response.statusCode != 200){
if(response.statusCode == 429)
return console.log("429 Too many requests"); //429 error
else
return console.log(response.statusCode+" "+response.body); //some other status code that isn't '200 OK'
}
var object = JSON.parse(body);
});
Добавьте блок try-catch вокруг JSON.parse()
JSON.parse()
- это функция, котораявернет объект JSON из String, если он правильно отформатирован, или выдаст ошибку в противном случае.
Поэтому рекомендуется обернуть его в блок try-catch, если строка поступает с другого веб-сайта, поскольку вы не можете сказать, что строка будет правильно отформатирована в 100% случаев.
Ваш окончательный код и его обработка ошибок, для меня, будут выглядеть примерно так:
Request.get(url, (error, response, body) => {
if(error) {
return console.dir(error);
}
if(response.statusCode != 200){
if(response.statusCode == 429)
return console.log("429 Too many requests");
else
return console.log(response.statusCode+" "+response.body);
}
var object;
try{
object = JSON.parse(body);
}catch(err){
console.log("Error on parsing string", err);
}
});