通过什么把戏分别构build两个对象可以是同一个对象?

我正在使用nodejs&mongodb&mongoose构build我的项目,而我的路由器/ api / db / *工作正常。

数据库连接代码实际上是如此之短,以至于不需要分离,但突然之间,我好奇它是否可以分离。

DB-instance.js

var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); module.exports = mongoose; 

models.js

 var mongoose = require('mongoose'); var fooSchema = mongoose.Schema({ id: Number, content: String }) var Foo = mongoose.model('Foo', fooSchema); module.exports = { Foo: Foo, mongoose: mongoose } 

db.js

 var models = require('../db/models'); --- 1 var mongoose = require('../db/db-instance'); --- 2 // importing order does not matter, both 1-2 & 2-1 works if (mongoose === models.mongoose) { console.log('same instance'); // this is printed } else { console.log('different instance'); } router.get('/getFoos', function(req, res, next) { models.Foo.find(...).exec(function(err, foos) { if (!err) { res.send(foos); } else { console.log(err); } }) }); 

它工作得很好,我认为mongoose模块必须检查它是否已经实例化,如果再次询问但不是真的,则给出存储的实例。

/node_modules/mongoose/lib/index.js

 function Mongoose() { ... } var mongoose = module.exports = exports = new Mongoose; 

我在这一点上迷了路。

这个function由Node提供,而不是由特定的模块提供。 从Node API参考:

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

在特定情况下,对象有时可能会有所不同,但是如果从同一个文件加载它们,它们几乎总是相同的对象。