更新Mongoose文档失败TypeError:无法读取undefined的属性'coordinates'

时间:2017-02-25 04:40:20

标签: javascript node.js mongodb rest mongoose

不确定我是否完全按照写入方式执行此操作,这是第一次尝试编写文档更新REST api调用。

我希望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 个答案:

答案 0 :(得分:1)

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

您需要将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){...}