Yahoo Weather API - Обработка строки ввода неверного местоположения | Node.js / Экспресс - PullRequest
0 голосов
/ 06 апреля 2020

Я очень плохо знаком с API, но я довольно успешно экспериментировал с пользовательской страницей о погоде, работающей на основе Weather API от Yahoo. Проблема с обработкой неверного ввода. Если конечный пользователь отправляет строку местоположения, которая не считается приемлемой по какой-либо причине, ответом является пустая страница, содержащая только слова «Внутренняя ошибка сервера». Я пытаюсь выполнить проверку 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

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

1 Ответ

0 голосов
/ 06 апреля 2020

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

if (parsedData === undefined)

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

let parsedData = JSON.parse(data); 

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

...