2013-09-13 4 views
10

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

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); 
} 
}); 

Спасибо.

+1

Как ваш вопрос связан с mongoDB? – Lix

+0

В проекте используется MongoDb, вот как. –

ответ

12

Итак, вы выяснили свою проблему, вроде. 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); 
     } 
    }); 
}); 
Смежные вопросы