首页 > 解决方案 > 使用请求模块处理错误 - 未定义的对象

问题描述

我正在尝试通过我的快速应用程序中的请求模块使用 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:无法读取未定义的属性'几何'”。Console.log(data) 显示数据对象的 features 元素是一个空数组 [ ]。我尝试通过在数据未定义时显示消息和重定向来处理错误,如下所示:

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

我正处于编码之旅的开始,这是我的第一个请求,所以我非常感谢任何帮助,谢谢!

标签: javascriptjsonexpress

解决方案


对不起,我周末休息。如果 data.features 是一个空数组,它不会失败 test (!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("/")
}

推荐阅读