Opção 1:use um objeto compartilhado
Meu código de modelo é semelhante, mas em vez de exigir repetidamente os módulos, eu os exijo apenas uma vez quando o aplicativo é iniciado e, em seguida, atribuo os resultados a um objeto compartilhado. Por exemplo, se você estiver usando um aplicativo expresso, poderá usar algo como
app.locals.models.User = require('./models/user');
. Então, qualquer coisa com acesso ao app
pode ver seus modelos sem precisar de um require. Opção 2:garantir uma única modificação na função exportada
Você pode definir seu módulo de usuário assim:
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;
};
Quando você inicia seu aplicativo, você simplesmente precisa:
require('./models/user')(db)
. Requerimentos subsequentes de outros módulos em seu aplicativo podem descartar o db
parâmetro, como User
será definido apenas uma vez.