Обработка ошибок из форм - Node / Express - PullRequest
0 голосов
/ 25 сентября 2019

Как я могу обработать ошибки из нулевых данных или недоступные города из API погоды?При вводе пустого запроса или города с ошибкой сервер возвращает ошибки и останавливается.

app.get("/", function(req, res) {
  let cityName = req.query.city;
  let url = "";

  if (cityName == null) {
    url = `https://api.openweathermap.org/data/2.5/weather?q=los+angeles&units=imperial&appid=${apiKey}`;
  } else {
    url = `https://api.openweathermap.org/data/2.5/weather?q=${cityName}&units=imperial&appid=${apiKey}`;
  }

  request(url, function(error, response, body) {
    data = JSON.parse(body);

    let weather = {
      city: data.name,
      temp: Math.floor(data.main.temp),
      desc: data.weather[0].description
    };

    var weather_data = { weather: weather };
    res.render("index", weather_data);
  });
});

отображение данных с .ejs

<p><%= weather.city %></p>
<p><%= weather.temp %></p>
<p><%= weather.desc %></p>

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Я думаю, что вы все еще хотите показать пользователю что-то в этих случаях, поэтому вы хотите предоставить что-то для рендера независимо.Если есть подлинная ошибка, а не просто ответ 404, вы, вероятно, захотите настроить регистрацию ошибок для них.Когда он возвращает «Не найден» из-за того, что он запросил несуществующий город, вы можете отправить сообщение типа «город не найден», чтобы они знали, что могут попробовать другой ввод.

Что-то вроде этого обеспечивает объект weather_dataсвоему клиенту, даже если это не совсем данные о погоде, чтобы он знал, что происходит, и одновременно обрабатывал вещи на сервере.

    request(url, function(error, response, body) {
        data = JSON.parse(body);
        if (error) {
            // TODO: log this error somewhere
            let weather = {
                city: 'something went wrong',
                temp: '',
                desc: ''
            }
        } else if (response.statusCode === 200){
            let weather = {
                city: data.name,
                temp: Math.floor(data.main.temp),
                desc: data.weather[0].description
            };
        } else if (response.statusCode === 404){
            let weather = {
                city: 'city not found',
                temp: '',
                desc: ''
            };
        }
        var weather_data = { weather: weather };
        res.render("index", weather_data);
    });
0 голосов
/ 25 сентября 2019

Для обработки нулевых значений вы можете применить проверку формы к формам и проверить var_name === null или нет на бэкэнде.Вы также можете проверить, является ли переменная пустой строкой или нет, и вы также можете проверить ее тип данных, используя свойство typeof.

Для проверки городов необходимо сохранить некоторые ссылки на города, для которых доступна погода или нет.Для сохранения статичности приложения вы можете хранить значения города в массиве или на карте и проверять город при доступе к маршруту.Если город совпадает, выполните операции, иначе верните ошибку throw.Если вам нужно приложение динамического узла, используйте базу данных для хранения городов и проверки городов оттуда.

Также попробуйте использовать res.send () и res.json () для отправки данных json вместо render.

...