Node.js – 需要mongoose在这里和那里造成冗余?

我有以下的Node.js目录结构。

|--app/ |--app.js |--routers/ |--index.js/ |--models/ |--schemas.js |--post.js 

app.js中 ,有一行喜欢这个mongoose.connect('mongodb://localhost/' + config.DB_NAME); 。 在schema.js中

 var mongoose = require('mongoose') , Schema = mongoose.Schema , ObjectId = Schema.ObjectId; var PostSchema = new Schema({ title: String , author: String , body: String , creataAt: { type: Date , default: Date.now } }); // other schemas goes here module.exports.PostSchema = PostSchema; 

post.js中

 var mongoose = require('mongoose') , PostSchema = require('./schemas').PostSchema , PostModel = mongoose.model('Post', PostSchema); module.exports = PostModel; 

而在index.js中 ,可能有这样的一行: var PostModel = require('../models/post'); 。 上面提到的所有文件都需要mongooseschemas.js的目的是帮助程序员在单个文件中掌握数据库的模式。 然而,我不知道这个工具是否会导致冗余,并导致更多的开销,因为我需要mongoose在这里和那里。 我应该把它作为一个争论吗?

如果你只是担心performance,你不需要。 按照http://nodejs.org/docs/latest/api/modules.html#modules_caching

高速caching

模块在第一次加载后被caching。 这意味着(除其他外)每个调用require('foo')将返回完全相同的对象,如果它将parsing为相同的文件。

多次调用require('foo')可能不会导致模块代码被多次执行。 这是一个重要的function。 有了它,“部分完成”的对象可以被返回,从而允许传递依赖被加载,即使它们会导致循环。

如果你想要一个模块多次执行代码,那么导出一个函数,然后调用这个函数。

所以,你实际上并不是每次都requiringmongoose。 相反,每次在第一次之后,都会返回caching的Mongoose模块。

当需要链接模块的mongoose时,还需要注意。 在mongoose的情况下,您通常依靠单例模式来访问MongoDB连接,并且caching机制可能会阻碍模块化。 我可能做错了什么,但我详细说明了这个问题: https : //stackoverflow.com/questions/16687619/node-js-require-do-not-behave-as-expected-when-using-linked-packages