es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los plugins globales de Mongoose no funcionan (ES6).

Me estoy encontrando con un problema con mongoose.plugin() y ninguno de los cambios globales de los plugins parecen afectar los esquemas.

Además de la importación, he intentado escribir directamente el plugin en el mismo archivo index.js y eliminar las funciones de puntero. Los plugins globales simplemente no parecen tener efecto. Solo estoy tratando de aplicar toJSON: { virtuals: true } a todos los modelos.

"mongoose": "^6.0.12"
import test from './plugins/test.js'
...

// Plugins
mongoose.plugin(test)
...

// Models
import './user.js'
...

test.js contenido:
export default (schema) => {
  schema.set('toJSON', { ...schema.get('toJSON'), virtuals: true })

  return schema
}

Cuando aplico directamente { toJSON: { virtuals: true } } al esquema de usuario, funciona como se pretende, pero quiero aplicar esto y potencialmente otros plugins a todos los modelos.

¡Se agradece cualquier ayuda o información!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás teniendo problemas al aplicar plugins globales utilizando mongoose.plugin() y quieres aplicar el plugin toJSON: { virtuals: true } a todos los modelos.

    Una posible solución podría ser asegurarte de que tu plugin test.js realmente modifique el objeto de esquema original que se pasa como argumento en su lugar. En tu implementación actual, estás creando un nuevo objeto con schema.set() en lugar de modificar el objeto original. Intenta cambiar el contenido de tu test.js por:

    export default (schema) => {
      schema.options.toJSON = Object.assign({}, schema.options.toJSON, { virtuals: true });
      return schema;
    }
    

    Además, asegúrate de llamar a mongoose.plugin() antes de definir cualquier modelo, ya que el orden es importante.

    Si eso no funciona, podrías intentar usar mongoose.Schema.plugin() en su lugar, que aplica el plugin al constructor del esquema directamente. Por ejemplo:

    import mongoose from 'mongoose';
    import test from './plugins/test.js';
    
    // Aplicar plugins globales
    mongoose.Schema.plugin(test);
    
    // Definir modelos
    const userSchema = new mongoose.Schema({
      // ...
    });
    

    ¡Espero que esto ayude a resolver tu problema! Avísame si tienes alguna pregunta adicional.

Comments are closed.