2017-02-25 69 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是否存在。 –

相關問題