передача проанализированных данных JSON в шаблон - PullRequest
0 голосов
/ 03 июля 2019

Анализ данных JSON из openweathermaps. Console.log работает, но данные не будут передаваться в шаблон ejs. Я получаю сообщение об ошибке «неопределенные данные».

Просмотрел множество видеоуроков, ассистентов преподавателей, но ничего не ловило. Похоже на простую вещь, просто с видом на некоторые мелкие детали. Или, может быть, нужно полностью переписать.

app.use(function (req, res, next) {
    let apiKey = "***************************";
    let city = "Providence,US";
    let url = `http://api.openweathermap.org/data/2.5/weather? 
    q=${city}&units=imperial&appid=${apiKey}`;

  request(url, function (error, response, body) {
      if (!error && response.statusCode == 200) {
      let weather = JSON.parse(body);
      let data = `temp ${weather.main.temp}  wind ${weather.wind.speed} 
      from ${weather.wind.deg}`;
      res.locals.weather = data;
      console.log(data);
      res.locals.error = null;
      next();
      } else {
      res.locals.data = null;
      res.locals.error = "There was an error current weather data.";
      next();
      }
    });
  });

app.get("/", (req, res) => {
    res.render("index",  {data: data});
});


app.listen(process.env.PORT || 3000, () => {
    console.log("SERVER IS RUNNING!");
});

Console.log выдает проанализированную температуру, ветер и направление. Запуск в браузере выдает ошибку "ReferenceError: данные не определены в app.get (/workspace/UdemyWebDev/c9Backup/weatherCall/app.js:42:30) ", указывая на объект {data: data} в обратном вызове res.render. Использование res.locals все еще остается загадкой после нескольких часов, ломая голову над этим. Любая помощь будет оценена.

1 Ответ

1 голос
/ 05 июля 2019

Я обнаружил, что выбор произвольной локальной переменной (ключа), привязанной к объекту погоды, и затем использование пары ключ: погода дает определенные значения.Затем подключите key.parameter.parameter.etc ... в шаблон отображаемых данных.EUREKA!... но потом я добрался до дома и пошел к облаку, хотя я был только без мыла.Вернуться к чертежной доске ...

app.use(function(req, res, next) {
    request(url, function(err, response, body) {
    let weather = JSON.parse(body);
         console.log(weather);
        res.locals.key = weather;
        next();
    });
});

app.get("/", function(req, res){
    res.render("index", {key: weather});
    });

**Now, in the template:**

<ul class="key">
                <li>
                    <%= key.name %>
                </li>
                <li class="cur">
                    Temp: <%= key.main.temp %> f
                </li>
                <li class="cur">
                    Press: <%= key.main.pressure %> mb
                </li>
                <li class="cur">
                    RH: <%= key.main.humidity %> %
                </li>
                <li class="cur">
                    Speed: <%= key.wind.speed %> mph
                </li>
                <li class="cur">
                    Dir: <%= key.wind.deg %> deg
                </li>
                <li class="cur">
                    wx: <%= key.weather.description %> deg
                </li>
            </ul>  

Все отлично и денди.

...