Javascript 使用请求模块处理错误-未定义对象
我正在尝试通过我的express应用程序中的请求模块使用Mapbox API获取位置坐标。请求的URL(特定位置)通过html表单给出。它在url中解析,API提供所有信息,包括坐标。看起来是这样的:Javascript 使用请求模块处理错误-未定义对象,javascript,json,express,Javascript,Json,Express,我正在尝试通过我的express应用程序中的请求模块使用Mapbox API获取位置坐标。请求的URL(特定位置)通过html表单给出。它在url中解析,API提供所有信息,包括坐标。看起来是这样的: app.post("/", function(req, res){ var location = req.body.location; var url = "https://api.mapbox.com/geocoding/v5/mapbox.places/" + location
app.post("/", function(req, res){
var location = req.body.location;
var url = "https://api.mapbox.com/geocoding/v5/mapbox.places/" + location + ".json?access_token=MY_TOKEN"
request(url, function(error, response, body) {
var data = JSON.parse(body);
var coordinates = data.features[0].geometry.coordinates
if (!data.features) {
req.flash("error", "Location not found, please try again.")
res.redirect("/")}
如果我尝试API可以找到并处理的任何位置,一切都会很好。但当我尝试通过表单插入一些随机字符时,应用程序崩溃,出现错误“TypeError:无法读取未定义的属性‘geometry’”。log(data)显示数据对象的features元素是一个空数组[]。
我试图通过在数据未定义时显示消息和重定向来处理错误,如下所示:
app.post("/", function(req, res){
var location = req.body.location;
var url = "https://api.mapbox.com/geocoding/v5/mapbox.places/" + location + ".json?access_token=MY_TOKEN"
request(url, function(error, response, body) {
var data = JSON.parse(body);
var coordinates = data.features[0].geometry.coordinates
if (!data.features) {
req.flash("error", "Location not found, please try again.")
res.redirect("/")}
我在我的编码旅程的开始,这是我的第一个请求,所以我非常感谢任何帮助,谢谢 对不起,我周末休假了。 如果data.features是一个空数组,它将不会通过测试
(!data.features)
。
你可以试试类似的东西
if(Array.isArray(data.features) && data.features.length>0){
//code here
}else{
req.flash("error", "Location not found, please try again.")
res.redirect("/")
}
将错误记录到控制台时会发生什么?我看不到您在发出请求后在任何地方处理错误。当我在发出请求后记录错误时,控制台中没有错误。在我看来,请求是毫无问题的,只是在我尝试将data.features[0].geometry.coordinates的值分配到变量“location”时,应用程序崩溃了。正如我所说的,data.features是一个空数组,但是当我尝试处理如上所示的错误时,它不会改变任何东西。