Yahoo Weather API — Обработка неверной входной строки местоположения | Node.JS/Экспресс

Я очень новичок в API, но я довольно успешно экспериментировал с пользовательской страницей погоды, которая работает на Yahoo Weather API. Проблема заключается в обработке неправильного ввода. Если конечный пользователь отправляет строку местоположения, которая по какой-либо причине считается неприемлемой, ответ представляет собой пустую страницу, на которой нет ничего, кроме слов «Внутренняя ошибка сервера». Я пытаюсь выполнить проверку if/else для неопределенного объекта ответа, но приложение продолжает двигаться вперед, несмотря ни на что. Вот мой код:

   request.get(
            'https://weather-ydn-yql.media.yahoo.com/forecastrss?location=' + location + '&format=json',
            null,
            null,
            function (err, data, result) {
                if (err) {
                    console.log(err);
                    return;
                } else {
                    let parsedData = JSON.parse(data); 
                    if (parsedData === undefined) { // this doesn't catch it
                        // stop app and throw some sort of error
                    } else {
                         ...// continue running app
                    }

Вот внутренняя ошибка консоли, которую я продолжаю получать, если отправлен неверный ввод:

TypeError: /workspace/web-dev-workshop/YahooWeatherAPI/YahooWeatherApp/views/home.ejs:29
    27| <% } %> 
    28| 
 >> 29| <% weatherCode = parsedData["current_observation"]["condition"]["code"]; %>
    30| 
    31| <!-- Location Form -->
    32|     <section id="location">

Cannot read property 'code' of undefined

Ищете какие-нибудь предложения о том, как я могу сделать так, чтобы страница вообще ничего не делала и просто обновлялась с пустым полем ввода, чтобы конечный пользователь мог попробовать еще раз, или, возможно, перенаправить их на страницу с ошибкой со ссылкой, чтобы вернуться и повторить попытку? Что проще всего. - Заранее спасибо за любые полезные советы, которые вы можете предоставить, ребята.


person servo    schedule 06.04.2020    source источник


Ответы (1)


Вы проверяете это:

if (parsedData === undefined)

Но прямо над этим вы явно определяете parsedData для всего, что возвращается из JSON.parse():

let parsedData = JSON.parse(data); 

Таким образом, parsedData будет любым результатом вызова JSON.parse() на вашем data, что, как я полагаю, должно быть чем-то. Выясните, что это за что-то в случае некорректного запроса к API Yahoo, и вы сможете это проверить.

person DanielSchroederDev    schedule 06.04.2020