Come ispezionare / iterare su un oggetto nel nodo?
-
09-12-2019 - |
Domanda
Sto ottenendo un risultato (l'oggetto) indietro da una query di mangusta e vuoi sostituire / rimuovere alcuni tasti, prima di stringere l'oggetto e inviarlo al client.
Quando I console.log L'oggetto, tutto è bello (tutte le chiavi sono elencate, niente di più). Quando faccio un per..in sull'oggetto, i campi nascosti popup dal nulla (e dalle chiavi di interesse, non lo fanno). Fanno un senso - appartengono alla mangusta - ma non li voglio. La stessa cosa accade, quando si utilizza Object.Keys o Object.GetOwnPropertyNames sull'oggetto - popup dei campi nascosti, nessuno utile.
Così volevo ispezionare l'elemento con util.inspect (obj, true, null, true) e registrare il risultato in console. Il risultato sulla console è lo stesso, come se avessi console.loged l'oggetto direttamente senza l'ispezione.
Ora, due domande;
- .
- Come posso ispezionare correttamente un oggetto, in modo da ottenere effettivamente informazioni interne / nascoste sull'oggetto?
- Come posso isolare sull'oggetto e ottenere solo i campi? (Sì, sto facendo l'holownproperty check all'interno del ciclo per..in)
// Modifica
OK, ho capito. Dopo alcune indagini, mi sono reso conto che l'oggetto mongoose proxy le sue proprietà e ha una funzione Tjson, che spiega perché la console.logs erano nella struttura di uscita prevista. La soluzione è utilizzare il metodo ToObject TOObject Mongoose;
.mongooseObj.toObject({ getters: true, virtuals: false })
In questo modo, posso isolare su Object.GetownPropertyNames e sostituire / rimuovere i tasti non voglio che il cliente sappia!
Soluzione
I'm going to guess that you're looking at the Document object returned by a mongoose query when you really just want to see the data. If my guess is correct, you'll probably want something like this:
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));
});
Altri suggerimenti
Also if you want to access a certain field from a Document you can take a look at:
// path
doc.get('age') // 47
// dynamic casting to a string
doc.get('age', String) // "47"