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

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

我正在尝试通过我的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
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是一个空数组,但是当我尝试处理如上所示的错误时,它不会改变任何东西。