2017-02-09 4 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); 
}); 

В настоящее время, только последний вход сохраняется. Что я делаю не так?

EDIT: Вот моя схема

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

idOfParameterInClient и response динамичны. В page1 имеется несколько пар ключ/значение. Как их сохранить?

+0

Что вы делаете, это объединить объект пользователя с объектом 'newAnswer'. Любое свойство в объекте 'newAnswer' будет перезаписывать одно и то же свойство в объекте пользователя. – Daff

+0

@ Дафф. Я добавил дополнительные разъяснения к моему вопросу/вопросу. –

ответ

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

Я обновил свой ответ. Если вы используете Mongoose с перьями-мангустами перед 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); 
    }); 
});