无法读取未定义的属性“结果”-var lat = data.results [0] .geometry.location.lat;

时间:2019-08-18 14:31:08

标签: javascript node.js location geocoder

添加位置并按Enter时出现错误

var lat = data.results[0].geometry.location.lat;

TypeError: Cannot read property 'results' of undefined

有时它给出了无法读取未定义错误的“几何”

//CREATE - add new campground to DB
router.post("/", isLoggedIn, isSafe, function(req, res){
  // get data from form and add to campgrounds array
  var name = req.body.name;
  var image = req.body.image;
  var desc = req.body.description;
  var author = {
      id: req.user._id,
      username: req.user.username
  }
  var cost = req.body.cost;
  geocoder.geocode(req.body.location, function (err, data) {
    var lat = data.results[0].geometry.location.lat;
    var lng = data.results[0].geometry.location.lng;
    var location = data.results[0].formatted_address;
    var newCampground = {name: name, image: image, description: desc, cost: cost, author:author, location: location, lat: lat, lng: lng};
    // Create a new campground and save to DB
    Campground.create(newCampground, function(err, newlyCreated){
        if(err){
            console.log(err);
        } else {
            //redirect back to campgrounds page
            console.log(newlyCreated);
            res.redirect("/campgrounds");
        }
    });
  });
});



var lat = data.results[0].geometry.location.lat;
                   ^

TypeError: Cannot read property 'results' of undefined
    at /home/shuaib/Desktop/The Web Developement Bootcamp/avasco/routes/campgrounds.js:54:20
    at Request._callback (/home/shuaib/Desktop/The Web Developement Bootcamp/avasco/node_modules/geocoder/providers/google.js:17:7)
    at Request.self.callback (/home/shuaib/Desktop/The Web Developement Bootcamp/avasco/node_modules/geocoder/node_modules/request/request.js:185:22)
    at emitTwo (events.js:126:13)
    at Request.emit (events.js:214:7)
    at Request.<anonymous> (/home/shuaib/Desktop/The Web Developement Bootcamp/avasco/node_modules/geocoder/node_modules/request/request.js:1161:10)
    at emitOne (events.js:116:13)
    at Request.emit (events.js:211:7)
    at IncomingMessage.<anonymous> (/home/shuaib/Desktop/The Web Developement Bootcamp/avasco/node_modules/geocoder/node_modules/request/request.js:1083:12)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:111:20)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

3 个答案:

答案 0 :(得分:1)

从Google API:

  

地理代码(请求,回调)

     

参数:

     

请求:GeocoderRequest

     

回调:函数(数组,GeocoderStatus)

     

返回值:无

     

对请求进行地理编码。

含义-您在代码中颠倒了“结果”和“错误”(实际上是状态)的顺序。

这应该是:

geocoder.geocode(req.body.location, function (**data, err**) { /*geocoder callback */ }

答案 1 :(得分:1)

控制台您的<h1 align="center">File is downloaded</h1> 对象。然后,您可以找到错误的地方。 由于errundefineddata,因此结果为null。 试试这个。

undefined

答案 2 :(得分:0)

现在重新格式化数据:var语法为:

      var lat = data[0].latitude;
      var lng = data[0].longitude;
      var location = data[0].formattedAddress;

查看api返回的简单方法是 console.log(数据)