即使明确存在也无法访问对象属性

时间:2019-05-15 14:44:27

标签: javascript node.js

我正在尝试使用node-geocoder获得纬度和经度。 我已经正确配置了所有内容。我已经有了API密钥以及我所需要的一切。

我第一次获得代码段中所示的位置(创建要插入数据库的对象时)

  geocoder.geocode(req.body.location, function (err, data) {

//i have some more variables declared here but those do not matter



     var lat = data.latitude;
      var lng = data.longitude;
      var location = data.formattedAddress;


   var newPost = {name: name, image: image, description: desc, author:author, location: location, lat: lat, lng: lng};

到目前为止,一切都很好。但是,当我尝试再次使用该位置时,我相信某些功能可以做的完全相同,data.latitudedata.formattedAddress之类的属性将返回未定义的值。

我尝试更改一些变量名称,以避免可能的名称冲突。没有可能的碰撞。

var NodeGeocoder = require('node-geocoder');

//settings
var options={
    provider:"google",
    httpAdapter: "https",
    apiKey:"..."
};

var geocoder=NodeGeocoder(options);
var geocoderUpdate=NodeGeocoder(options);


//...


//WHEN CREATING(IT WORKS)

 geocoder.geocode(req.body.location, function (err, data) {

//i have some more variables declared here but those do not matter

      var lat = data.latitude;
      var lng = data.longitude;
      var location = data.formattedAddress;


   var newPost = {name: name, image: image, description: desc, author:author, location: location, lat: lat, lng: lng};



//WHEN TRYING TO UPDATE (DOESN'T WORK)

geocoderUpdate.geocode(req.body.location, function (err, dataUpdate) {

      var latUpdate = dataUpdate.latitude;
      var lngUpdate = dataUpdate.longitude;
      var locationUpdate = dataUpdate.formattedAddress;
    var newData = {name: req.body.name, image: req.body.image, description: req.body.description, location: locationUpdate, lat: latUpdate, lng: lngUpdate};

console.log(dataUpdate)返回整个对象,这很好。因此,当我尝试执行console.log(dataUpdate.longitude)时,我得到的是不确定的而不是属性的数值,这是非常意外的。

2 个答案:

答案 0 :(得分:0)

我没有注意到它返回一个数组,从方括号中可以看出。 那讲得通。我不得不打电话给data[0].longitude而不是data.longitude

答案 1 :(得分:-1)

似乎我忘记了创建对象时必须具有的位置值。 尽管如此,从对象提取属性的问题仍然存在

我尝试了以下操作:

console.log(typeof(data))返回了 object

console.log(data);返回了整个对象:(我尝试将“里斯本”作为地址解析器的输入数据)

[ { formattedAddress: 'Lisbon, Portugal',
    latitude: 38.7222524,
    longitude: -9.1393366,
    extra:
     { googlePlaceId: 'ChIJO_PkYRozGQ0R0DaQ5L3rAAQ',
       confidence: 0.5,
       premise: null,
       subpremise: null,
       neighborhood: 'Lisbon',
       establishment: null },
    administrativeLevels: { level1long: 'Lisbon', level1short: 'Lisbon' },
    city: 'Lisbon',
    country: 'Portugal',
    countryCode: 'PT',
    provider: 'google' } ]

console.log(dataUpdate['longitude']);返回了undefined

这是npm包中的节点地理编码器,配置为使用Google地图。