Javascript 更新Mongoose文档失败TypeError:无法读取未定义的属性“坐标”

Javascript 更新Mongoose文档失败TypeError:无法读取未定义的属性“坐标”,javascript,node.js,mongodb,rest,mongoose,Javascript,Node.js,Mongodb,Rest,Mongoose,我不确定我是否以写的方式来做这件事,这是第一次尝试编写文档更新RESTAPI调用 我希望api调用只提供他们想要更新的文档的字段,所以我要检查每个字段是否有数据,然后添加数据,如果没有,则忽略,以避免字段为空 正如您所看到的,我试图检查字段是否未定义,或者字段是否存在,它们都会导致相同的服务器错误 app.put('/api/objects/update/:_id', function(req, res) { var id = req.params._id var object;

我不确定我是否以写的方式来做这件事,这是第一次尝试编写文档更新RESTAPI调用

我希望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
第一个问题是我可以检查一个未定义的属性来跳过它吗? 我应该这样做吗?如果有人有更好的方法,我洗耳恭听。

它显示了错误,因为object.geometry没有定义。因此,当您试图为object.geometry.coordinates赋值时,它是未定义的

您需要将object和object.geometry定义为对象{}类型,然后才能使用点表示法。。对于object.properties也是一样,您需要将其定义为对象{}类型

替换:

与:

一切都会好起来的

更新:

req.body中没有作为几何体的对象,因此req.body.geometry未定义,这就是它抛出该错误的原因。首先需要检查req.body.geometry是否存在,然后查找req.body.geometry.coordinates

使用以下命令:

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

谢谢,我明白你对变量结构的看法,但是我得到的错误在行的前一部分,if typeof req.body.geometry.coordinates!==未定义的部分。这是我试图提交的身体对象,我将把它添加到原始问题中,我不能重新构造这个陈述,因为它是外部的。{properties:{name:Ted}}我知道,req.body没有像geometry这样的字段,因此req.body.geometry是未定义的。您需要检查req.body.geometry是否存在。
var object={};
object.geometry={};
object.properties = {};
if (req.body.geometry && typeof req.body.geometry.coordinates !== undefined){...}