使用嵌套模式引导Mongoose模型

时间:2015-01-29 20:57:21

标签: node.js express mongoose

您好我在使用嵌套架构初始化我的Mongoose模型时遇到了问题,您知道,这是我的服务器。

var express = require('express'),
  mongoose = require('mongoose');
  bootstrap = require('./lib/bootstrap.js');

var app = express();

// Connect to Mongo when the app initializes
mongoose.connect('dir');

// Config should go here
bootstrap.execute();

// Setting up the app
app.use('/events', require('./route/events.js'));

var server = app.listen(process.env.PORT || 5000, function() { 
  console.log('Listening on port %d', server.address().port); 
});

我现在这样做的方式是使用自举功能:

module.exports = {

  execute: function() {

    // Bootstrap entities
    var entityFiles = fs.readdirSync("model");
    entityFiles.forEach(function(file) {
      require("../model" + file);
    }));

  }

}

但是因为我的模式有点像这两个,所以顺序很重要:

var Presentation = mongoose.model('Presentation'),

var eventSchema = new Schema({
  ...
  presentations: [Presentation.schema]
});

module.export = mongoose.model('Event', eventSchema);

var presentationSchema = new Schema({
  ...
  dateTime: Date
});

module.exports = mongoose.model('Presentation', presentationSchema);

如你所见,他们彼此依赖,而这些只是其中的两个。所以这意味着有些人将首先被引导,而无疑会引发错误。

有更好的方法吗?我错过了什么?

我想在使用模式时只使用模式而不是模型,但我必须将模式文件更改为:

var presentationSchema = new Schema({
    ...
    dateTime: Date
});

module.exports = (function() {
    mongoose.model('Presentation', presentationSchema);
    return presentationSchema;
})();

这看起来非常糟糕。

1 个答案:

答案 0 :(得分:1)

这就是为什么我不使用mongoose.model加载模型的原因。

而不是那样,如果您只是在需要时需要模型,它将按预期工作:

var Presentation = require('./presentation');

var eventSchema = new Schema({
   ...
   presentations: [Presentation.schema]
});

module.export = mongoose.model('Event', eventSchema);

请记住Node.js cache its modules,因此第一次调用require时,节点将从头开始加载模块。在此之后,它将从内部缓存返回模块。