从openweathermaps解析JSON数据。 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)”处,指向res.render回调中的{data:data}对象。 经过数小时的困惑之后,使用res.locals仍然是一个谜。任何帮助将不胜感激。
答案 0 :(得分:1)
我发现的是,选择一个与天气对象绑定的任意局部变量名称(关键字),然后使用以下关键字:天气对产生已定义的值。然后将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>
一切都很好。