2017-05-18 1 views
0

j'ai quelque chose comme le code suivant:Attributs dénudage avec toJSON/toObject

User.findOne(id) 
    .exec((err, user) => { 
     Pets.find(_.pluck(user.pets, 'id')) 
      .populate("toys") 
      .exec((err, petsWithToys) => { 
       user.pets = petsWithToys; 
       return res.ok({ user: user }); 
      }); 
    }); 

Quand je regarde la réponse du client, je ne vois pas le tableau de jouets à l'intérieur de l'animal.

Je pensais que c'était peut-être dû à l'annulation de la fonction toJSON dans mon modèle User mais même en le supprimant, j'ai le même comportement.

En outre, j'ai découvert que si j'affecte les valeurs à une nouvelle propriété qui n'est pas définie dans le modèle, je vois les valeurs sur le client. C'est à dire. si oui, je verrai la propriété entièrement peuplée

user.petsNew = petsWithToys; 
J'ai vu la documentation de toObject où est dit qu'il supprime les méthodes d'instance ( here) mais je ne sais pas pourquoi la collection est considérée comme une méthode et ne comprends pas comment après avoir changé la valeur, elle est toujours supprimée.

Des commentaires/explications/solutions de contournement?

P.S. Essayé à l'étape dans le code mais ne peut pas entrer dans toObject ...

+0

Lorsque vous définissez un point d'arrêt sur la 'user.pets = petsWithToys, ligne' et inspecter 'user', at-il' toys'? –

+1

Quelle version de Lodash utilisez-vous? puisque la v.4 '_.pluck' est supprimée en faveur de' _.map'. Voir [ce lien] (http://stackoverflow.com/questions/35136306/what-happened-to-lodash-pluck) –

+0

@ T.J.Crowder - oui, il y a - il n'est supprimé que dans l'appel toJSON/toObject. Il semble que la suggestion dans la réponse ci-dessous fonctionnerait (besoin de tester). –

Répondre