Obtengo un resultado (el objeto) de una consulta de mangosta y deseo reemplazar/eliminar algunas claves, antes de codificar el objeto y enviarlo al cliente.cómo inspeccionar/iterar sobre un objeto en el nodo?
Cuando console.log el objeto, todo está bien (todas las teclas están en la lista, nada más). Cuando hago un for..in en el objeto, los campos ocultos aparecen de la nada (y las claves de interés, no). Tienen sentido, pertenecen a la mangosta, pero yo no los quiero. Lo mismo ocurre cuando se usan Object.keys u Object.getOwnPropertyNames en el objeto: campos ocultos, ninguno útil.
Así que quería inspeccionar el elemento con util.inspect (obj, true, null, true) y registrar el resultado en la consola. El resultado en la consola es el mismo, como si hubiera consolado.logged el objeto directamente sin la inspección.
Ahora, dos preguntas;
- ¿Cómo inspecciono correctamente un objeto, de modo que realmente obtengo información interna/oculta sobre el objeto?
- ¿Cómo puedo iterar sobre el objeto y solo obtener los campos? (Sí, estoy haciendo el cheque hasOwnProperty dentro del bucle for..in)
// EDITAR
OK, lo tengo. Después de algunas investigaciones, me di cuenta de que el objeto mangosta representa sus propiedades y tiene una función TOJSON, lo que explica por qué console.logs estaba en la estructura de salida esperada. La solución es usar el método de Mongoose toObject;
mongooseObj.toObject({ getters: true, virtuals: false })
De esta manera, puedo iterar sobre Object.getOwnPropertyNames y reemplazar/eliminar las claves no quiero que el cliente saber!
¿Puedes volver a formular tu pregunta un poco? Me está costando entender lo que estás preguntando. ¿Qué quieres decir con "campos ocultos"? ¿Son solo propiedades las que están más arriba en la cadena de prototipos? ¿Las propiedades que están marcadas como no enumerables? ¿O propiedades que comienzan con _underscore? –