Opción 1:usar un objeto compartido
El código de mi modelo es similar, pero en lugar de requerir los módulos repetidamente, solo los requiero una vez cuando se inicia la aplicación y luego asigno los resultados a un objeto compartido. Por ejemplo, si está utilizando una aplicación Express, podría simplemente hacer algo como app.locals.models.User = require('./models/user');
. Entonces cualquier cosa con acceso a la app
puede ver sus modelos sin necesidad de un requerimiento.
Opción 2:Garantizar una única modificación en la función exportada
Puede definir su módulo de usuario así:
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({name: String});
var User = null;
module.exports = function(db) {
if (db && User === null) {
User = db.model('User', userSchema);
}
return User;
};
Cuando inicia su aplicación, simplemente necesita:require('./models/user')(db)
. Los requisitos posteriores de otros módulos en su aplicación pueden eliminar el db
parámetro, como User
solo se establecerá una vez.