Sails.js: как обновить модель - программирование
Подтвердить что ты не робот

Sails.js: как обновить модель

Простите мой вопрос noob. Я использую angularjs для отправки пользовательской модели (json) с различными полями. Он хорошо работает с sails.js default PUT. Я перепробовал PUT, проблема в том, что я хочу обновить модель с помощью полученного JSON и выполнить некоторую обработку модифицированной модели. Теперь я не могу обновить модель с помощью

User.update({
id: req.body.id
},{
req.body
}, function(err, users) {
// Error handling
if (err) {
return console.log(err);
// Updated users successfully!
 } else {
console.log("Users updated:", users);
}
});

Пожалуйста, помогите

EDIT: После нескольких секунд стучать головой о стену, проблема решена! Я знаю, что мой код форматирования здесь не самый лучший.

изменил это:

{
   req.body
  }

просто:

req.body

(без фигурных скобок)

полный фрагмент будет:

User.update({
 id: req.body.id
},
req.body
, function(err, users) {
// Error handling
if (err) {
return console.log(err);
// Updated users successfully!
} else {
console.log("Users updated:", users);
}
 });

Спасибо.

4b9b3361

Ответ 1

Итак, вы поняли свою проблему, вроде. req.body уже является объектом. Но вы действительно должны дезинформировать его, прежде чем вносить его в свое обновление, а затем сохранить объект. Там много причин для этого, но с Mongo, когда вы получаете только частичный объект, вы замените объект в коллекции, который в вашем примере с пользователем может быть плохим. Когда я отправляю пользователей в интерфейс, я отбираю вещи, которые я не хочу передавать по всему, как пароли. Другая причина - золотое правило разработки веб-приложений - никогда не доверяйте клиенту! Я бы начал с чего-то вроде:

var user = User.findOne(req.body.id).done(function(error, user) {
    if(error) {
        // do something with the error.
    }

    if(req.body.email) {
        // validate whether the email address is valid?

        // Then save it to the object.
        user.email = req.body.email;
    }
    // Repeat for each eligible attribute, etc.

    user.save(function(error) {
        if(error) {
            // do something with the error.
        } else {
            // value saved!
            req.send(user);
        }
    });
});