2017-02-09 75 views
0

我的Feathers.js應用程序有一個問卷,我試圖保存每個輸入的結果。這裏是我的客戶端代碼:如何在PATCH之後保存貓鼬數據?

$.ajax({ 
    url: "/answer", 
    type: "PATCH", 
    data: newAnswer, 
    success: function() { 
    console.log("Answer submitted!"); 
    }, 
    error: function() { 
    console.log("Error submitting answer."); 
    } 
}); 

這裏是我的服務器端代碼:

app.patch("/answer", (req, res) => { 
    users.patch(user[0]._id, req.body); 
}); 

目前,只有最後一個輸入被保存。我究竟做錯了什麼?

編輯:這裏是我的架構

answers: { 
    yourOrganization: { 
    page1: { 
     idOfParameterInClient: response 
    } 
    } 
} 

idOfParameterInClientresponse是動態的。在page1中,有許多鍵/值對。我如何保留它們?

+0

什麼你正在做的是用'newAnswer'對象合併用戶對象。 'newAnswer'對象中的任何屬性都將覆蓋用戶對象中的相同屬性。 – Daff

+0

@Daff我爲問題添加了更多的說明。 –

回答

0

patch不會執行遞歸合併(MongoDB也不會)。如果這是你正在尋找的東西,你必須自己去做,例如使用deepmerge package

const merge = require('deepmerge'); 

app.patch("/answer", (req, res) => { 
    const id = user[0]._id; 

    users.get(id).then(user => { 
    const mergedUser = merge(user.toObject(), req.body); 

    users.patch(id, mergedUser); 
    }); 

}); 
+0

我一直試圖這個和這個變種,但沒有出現在貓鼬。在控制檯中查看'mergedUser'也很奇怪,因爲我只是看到函數和數據。 –

+0

我更新了我的答案。如果您在v4.0.0之前使用蒙牛與羽毛 - 貓鼬,您必須首先調用'.toObject' – Daff

+0

我沒有意識到我仍在使用過時的模塊!謝謝你的提示。我將繼續保持我做過的工作,但我會接受你的回答作爲答案。 –

0

@Daff讓我走上正軌。最後,object-patch允許我做遞歸合併。這裏是我的代碼:

const patch = require("object-patch"); 

app.patch("/answer", (req, res) => { 
    const id = user[0]._id; 

    users.get(id).then(user => { 
    patch(user, req.body); 
    users.update(user._id, user); 
    }); 
});