不确定我是否完全按照写入方式执行此操作,这是第一次尝试编写文档更新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
第一个问题是我可以检查未定义的属性以跳过它吗? 我应该这样做吗?如果有人有更好的方法的例子,我会全力以赴。
答案 0 :(得分:1)
显示error
,因为未定义object.geometry
。因此,当您尝试将值分配给undefined
时,它将显示为object.geometry.coordinates
。
您需要将object
和object.geometry
定义为object({})
类型,然后您才能使用点表示法(。)。与object.properties
相同的是,您需要将其定义为object({})
类型。
<强>替换强>
var object;
。通过强>
var object={};
object.geometry={};
object.properties = {};
一切都会对你有用。
<强>更新强>
req.body
内部没有geometry
对象,因此req.body.geometry
为undefined
,这就是它抛出错误的原因。首先,您需要检查req.body.geometry
是否存在,然后转到req.body.geometry.coordinates
使用它:
if (req.body.geometry && typeof req.body.geometry.coordinates !== undefined){...}