Comment inspecter / itérer sur un objet dans le nœud?
-
09-12-2019 - |
Question
Je reçois un résultat (l'objet) de retour d'une requête de mangouste et je veux remplacer / supprimer certaines touches, avant de régler l'objet et envoyez-le au client.
Quand je console.Log the Object, tout est sympa (toutes les clés sont répertoriées, rien de plus). Lorsque je fais un pour..in sur l'objet, des champs cachés se content de nulle part (et des clés d'intérêt, ne le font pas). Ils ont du sens - ils appartiennent à la mangouste - mais je ne les veux pas. La même chose se produit, lors de l'utilisation d'objets.Keys ou Object.getownPropertyNames sur l'objet - Fields Cachés popup, aucune utile.
Alors je voulais inspecter l'élément avec util.Inspect (obj, vrai, null, vrai) et enregistrer le résultat à la console. Le résultat sur la console est identique, comme si j'étais console.Boggégé l'objet directement sans l'inspection.
Maintenant, deux questions;
- Comment puis-je inspecter correctement un objet, de sorte que je reçois des informations internes / cachées sur l'objet?
- Comment puis-je itération sur l'objet et que vous n'obtenez que les champs? (Oui, je fais la vérification de HasownProperty dans la touche pour..in de boucle)
// edit
OK, je l'ai eu. Après une enquête, j'ai réalisé que l'objet Mongoose procède à ses propriétés et a une fonction TOJSON, ce qui explique pourquoi la console.Logs était dans la structure de sortie attendue. La solution consiste à utiliser la méthode de ToObject de Mongoose;
mongooseObj.toObject({ getters: true, virtuals: false })
De cette façon, je peux itérer sur objet.getownPropertyNames et remplacer / retirer les touches Je ne veux pas que le client sache!
La solution
Je vais deviner que vous regardez le document objet retourné par une requête de mangouste lorsque vous voulez vraiment justevoir les données.Si ma supposition est correcte, vous voudrez probablement quelque chose comme ceci:
Model.findOne({ name: 'john' }, function (err, doc) {
var data = doc.toObject();
// do whatever you need to with data
delete data.age;
delete data.weight;
data.isAwesome = true;
// now stringify the data and do something with it
callback(JSON.stringify(data));
});
Autres conseils
Également si vous souhaitez accéder à un certain champ à partir d'un document Vous pouvez regarder:
# Document # Obtenez
// path
doc.get('age') // 47
// dynamic casting to a string
doc.get('age', String) // "47"