【发布时间】:2020-04-07 21:31:02
【问题描述】:
新手程序员在这里尝试使用 api 制作一个简单的应用程序。到目前为止,我正在使用开放天气地图的 api 和谷歌地理编码器。我已经设置好了,所以用户可以输入一个城市、州、国家甚至大陆,它应该用温度和描述来响应。没什么太花哨的。问题是当用户输入拼写错误的城市或州时,我的应用程序中断并且服务器崩溃。这甚至发生在像老挝这样的国家 - 拼写正确但仍然出现同样的错误。我正在使用和 ejs 文件来显示结果。这是一些代码:
{"cod":"404","message":"city not found"}
TypeError: /Users/jamesmolnar/Desktop/NewApps/weather/views/results.ejs:5
3| <h3>Here are the results:</h3>
4| <p>
5| <% data.weather.forEach(function(result) { %>
6| <%= console.log(data.weather) %>
7| <%= result.description %>
8| <% }) %>
Cannot read property 'forEach' of undefined
My app.js file:
// require("dotenv").config();
const express = require("express");
const app = express();
const PORT = process.env.PORT || 3000;
const request = require("request");
app.set("view engine", "ejs");
app.get("/", (req, res) => {
res.render("index");
});
app.get("/results", (req, res) => {
let query = req.query.search;
let weatherApiKey = "0a79f1c8132aac82c5c086a570df5224";
let weatherUrl =
"https://api.openweathermap.org/data/2.5/weather?q=" +
query +
"&appid=" +
weatherApiKey;
request(weatherUrl, (err, response, body) => {
if (!err) {
let data = JSON.parse(body);
console.log(body);
res.render("results", { data: data });
} else {
console.log(err);
}
});
let location = req.query.search;
let geoCodeApiKey = "AIzaSyBrxDkJD5NFSQqKFbc5axWn0sGPg0bRYn8";
let geocodeMapUrl =
"https://maps.googleapis.com/maps/api/geocode/json?address=" +
location +
"&key=" +
geoCodeApiKey;
request(geocodeMapUrl, (err, response, body) => {
if (!err) {
let mapData = JSON.parse(body);
console.log(body);
res.render("results", { mapData: mapData });
} else {
console.log(err);
}
});
});
app.listen(PORT, () => {
console.log("Weather App is listening on PORT:", PORT);
});
my results.ejs file
<%- include ("./partials/header") %>
<h3>Here are the results:</h3>
<p>
<% data.weather.forEach(function(result) { %>
<%= console.log(data.weather) %>
<%= result.description %>
<% }) %>
<% let tempInFahrenheit = (data.main.temp * 9/5) - 459.67; %>
<%=Math.floor(tempInFahrenheit)%> degrees outside.
</p>
<div id="map"></div>
<a href="/">Back</a>
<%- include ("./partials/footer") %>
【问题讨论】:
-
您能否查看此类 API 的文档,它们是否提供了避免拼写错误的选项? - 我会检查这是否可能,或者,对于临时解决方案,一旦出现 404 错误,就相应地处理错误。
标签: javascript api