使用请求模块处理错误-未定义的对象

时间:2018-11-12 23:47:23

标签: 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 + ".json?access_token=MY_TOKEN"

    request(url, function(error, response, body) {
    var data = JSON.parse(body);
    var coordinates = data.features[0].geometry.coordinates

如果我尝试API可以找到并处理的任何位置,那么一切都将正常工作。但是,当我尝试通过表单插入一些随机字符时,应用程序崩溃,并显示错误“ TypeError:无法读取未定义的属性'geometry'”。 Console.log(data)显示数据对象的features元素是一个空数组[]。 我尝试通过显示消息并在数据未定义时重定向来处理错误,如下所示:

if (!data.features) {
    req.flash("error", "Location not found, please try again.")
    res.redirect("/")}

我是编码之旅的开始,这是我的第一个要求,非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

对不起,我周末休息。 如果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("/")
}