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
...
Lorsque vous définissez un point d'arrêt sur la 'user.pets = petsWithToys, ligne' et inspecter 'user', at-il' toys'? –
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) –
@ 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). –