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;

  1. Comment puis-je inspecter correctement un objet, de sorte que je reçois des informations internes / cachées sur l'objet?
  2. 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!

Était-ce utile?

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"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top