2017-02-25 61 views
0

不知道我是否完全按照写入方式执行此操作,这是第一次尝试写入文档更新REST API调用。更新Mongoose文档失败TypeError:无法读取未定义的属性'坐标'

我希望api调用只提供他们想要更新的文档的字段,所以我要检查每个字段是否有数据然后添加它,或者如果不是为了避免字段被忽略而忽略。

正如你所看到的,我已经试过检查字段是否未定义,或字段是否存在,它们都导致相同的服务器错误。

app.put('/api/objects/update/:_id', function(req, res) 
{ 
    var id = req.params._id 
    var object; 

    if (typeof req.body.geometry.coordinates !== undefined) { object.geometry.coordinates = req.body.geometry.coordinates; } 
    if (req.body.properties.name) { object.properties.name = req.body.properties.name; } 


    Object.updateObject(id, object, {}, function(err, object) 
    { 
     if (err) 
     { 
      res.json(err); 
      console.log("Object Not Found: " + id); 
     } 

     res.json(object); 
     console.log("Updated Object: " + id); 
    }); 
}); 

这就是会被提交req.body的内容:

{ 
    "properties": 
    { 
    "name": "Ted" 
    } 
} 

服务器错误召唤出第一个if语句和失败。

TypeError: Cannot read property 'coordinates' of undefined 
    at /opt/bitnami/apps/API/app.js:221:31 

第一个问题是我可以检查一个未定义的属性来跳过它吗? 我应该这样做吗?如果任何人有更好的方式的例子,我都耳朵。

回答

1

它显示error,因为object.geometry未定义。因此当您尝试将值分配给object.geometry.coordinates时,它将以undefined的形式出现。

您需要将objectobject.geometry定义为object({})类型,只有这样您才能使用点符号(。)。与object.properties一样,您需要将其定义为object({})类型。

替换:

var object; 

有了:

var object={}; 
object.geometry={}; 
object.properties = {}; 

,一切都将正常工作适合你。

更新:

req.body没有对象geometry里面,从而req.body.geometryundefined,这就是为什么它是抛出这个错误。首先,你需要检查是否存在req.body.geometry,然后去req.body.geometry.coordinates

使用本:

if (req.body.geometry && typeof req.body.geometry.coordinates !== undefined){...} 
+0

谢谢,我看到你说的话对变量的结构,但错误我得到在该行的前一部分,即'if(typeofreq.body.geometry.coordinates!== undefined)'部分。 这是我试图提交的身体对象(我将这个添加到原始问题),我不能重新构造这个语句,因为它是外部的。 '{ “属性”: { \t “名”: “泰德” } }' – stuffyjoelab

+0

我明白了,REQ。body没有几何体这样的字段,因此,req.body.geometry是未定义的。你需要检查req.body.geometry是否存在。 –

相关问题