res req que nodejs node jade error node.js mongoose

node.js - req - node js response error



¿Cómo conviertes un documento de Mangosta en un objeto simple? (4)

El Model mangosta hereda de Document s, que tiene un método toObject() . Creo que lo que estás buscando debería ser el resultado de doc.toObject() .

http://mongoosejs.com/docs/api.html#document_Document-toObject

Tengo un documento de un hallazgo de mangosta que quiero extender antes de la codificación JSON y el envío como respuesta. Si intento agregar propiedades al documento, se ignora. Las propiedades no aparecen en Object.getOwnPropertyNames(doc) haciendo que una extensión normal no sea posible. Lo extraño es que JSON.parse(JSON.encode(doc)) funciona y devuelve un objeto con todas las propiedades correctas. ¿Hay una mejor manera de hacer esto?


Otra forma de hacerlo es decirle a Mongoose que todo lo que necesita es una versión de JavaScript sin formato del documento devuelto utilizando lean() en la cadena de consulta. De esta forma, Mongoose omite el paso de crear la instancia de modelo completa y usted obtiene directamente un doc que puede modificar:

MyModel.findOne().lean().exec(function(err, doc) { doc.addedProperty = ''foobar''; res.json(doc); });


Una mejor forma de resolver un problema como este es usar doc.toObject() como este

doc.toObject({ getters: true })

otras opciones incluyen:

  • getters: aplicar todos los getters (ruta y getters virtuales)
  • virtuals: aplicar getters virtuales (puede anular la opción de getters)
  • minimize: eliminar objetos vacíos (por defecto es verdadero)
  • transform: una función de transformación para aplicar al documento resultante antes de regresar
  • depopulate: despoblar cualquier ruta poblada, reemplazándolas por sus referencias originales (por defecto es falsa)
  • versionKey: si se debe incluir la clave de la versión (por defecto es verdadera)

así que por ejemplo puedes decir

Model.findOne().exec((err, doc) => { if (!err) { doc.toObject({ getters: true }) console.log(''doc _id:'', doc._id) } })

y ahora funcionará


la manera rápida si la propiedad no está en el modelo:

document.set( key,value, { strict: false });