通过什么把戏分别构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”)
在特定情况下,对象有时可能会有所不同,但是如果从同一个文件加载它们,它们几乎总是相同的对象。