¿Cómo inspeccionar / iterar sobre un objeto en el nodo?
-
09-12-2019 - |
Pregunta
Estoy obteniendo un resultado (el objeto) de una consulta de mangosta y desea reemplazar / eliminar algunas teclas, antes de que rinde el objeto y envíelo al cliente.
Cuando consuelo.Log el objeto, todo es bueno (todas las llaves están listadas, nada más). Cuando hago un para ... en el objeto, los campos ocultos aparecen de la nada (y las claves de interés, no). Tienen sentido, pertenecen a la mangosta, pero no los quiero. Lo mismo ocurre, cuando se usa objetos. OKEYS.GETOWNPROPERTYNAMES EN EL OBJETO - CAMPOS OCULTUROS POPULAR, NINGUNA ÚTIL.
Así que quería inspeccionar el elemento con util.inspect (obj, verdadero, nulo, verdadero) y registrar el resultado de la consola. El resultado en la consola es el mismo, como si hubiera consolación. Anula el objeto directamente sin la inspección.
ahora, dos preguntas;
- ¿Cómo inspecciono correctamente un objeto, para que realmente obtenga información interna / oculta sobre el objeto?
- ¿Cómo puedo iterar sobre el objeto y solo obtener los campos? (Sí, estoy haciendo el cheque de HadownProperty dentro de los ... en lazo)
// editar
OK, lo tengo. Después de alguna investigación, me di cuenta de que el objeto de mangosta proxtima sus propiedades y tiene una función de TOJSON, que explica por qué la consola. LosOgs estaban en la estructura de salida esperada. La solución es usar el método de toobject propio de mangosta;
mongooseObj.toObject({ getters: true, virtuals: false })
De esta manera, puedo iterar sobre objetos.GetownPropertynames y reemplazar / eliminar las teclas ¡No quiero que el cliente sepa sobre!
Solución
Voy a adivinar que está mirando el documento devuelto por una consulta de mangosta cuando realmente solo quiereVer los datos.Si mi conjetura es correcta, probablemente querrá algo como esto:
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));
});
Otros consejos
También si desea acceder a un campo determinado de un documento puede echar un vistazo a:
Documento # GET
// path
doc.get('age') // 47
// dynamic casting to a string
doc.get('age', String) // "47"