Node.js: Как я могу клонировать объект с Underscore и назначить новые свойства клону впоследствии? - PullRequest
2 голосов
/ 10 февраля 2012

Я работаю над REST API с помощью узла и экспресса.Я использую mongoose.js и создаю новый пользовательский документ в моей базе данных.Нет пота, прекрасно работает.

Проблема возникает, когда я хочу добавить свойство к объекту json, которое возвращает .save ().Я хочу добавить это свойство после сохранения, поскольку это флаг клиента, использующего интерфейс REST, но я не хочу сохранять его в БД.

Вот мой пример:

var _ = require('underscore');    
var user = new User({"username" : "Joe"});
user.save(function(err, newuser){
  if (err) return next(err);
  var nu = _.clone(newuser);
  nu.newbie = 'true';
  res.send(JSON.stringify(nu));
});

Вот пример ответа (это то, что в nu):

{
"username": "Joe",
"_id": "4f343383a5503c452a000002",
}

Как видите, я пытаюсь добавить свойство nu.newbie и установить его на trueне работает.Я считаю, что это какой-то масштаб или референс.Есть идеи?

1 Ответ

5 голосов
/ 10 февраля 2012

Проблема в том, что объект, возвращаемый функцией сохранения, не является «необработанным» объектом javascript. Он обернут мангустом и там есть свои методы. Когда вы клонируете, вы также клонируете материал мангуста!

Когда объект mongoose отправляется с помощью res.send, он сериализуется, а mongoose только сериализует элементы объектов, о которых ему известно. Если вы хотите добавить свойства, вам нужно сделать это для «сырого» объекта javascript. Вот так:

var nu = newuser.toJSON();
nu.newbie = 'true';
res.json(nu);

Кроме того, res.json - это просто хорошее сокращение, которое позаботится о преобразовании в json и настройке типа контента.

...