//module.js
exports.doA = function(callback) {
db.asyncConnect(/* connect options */, function(err, database) {
if(err == null) {
exports.db = database;
}
});
}
exports.db = null;
// test1.js
var mydb = require('module');
console.log(mydb);
// test2.js
var db = require('module').db;
console.log(db);
var mydb = require('module');
与var mydb = require('module').db;
有何不同?
更新:使用我正在观察的代码和行为进行更新
// file: db.js
exports.init = function (start_server){
MongoClient.connect(url, {
db: {
raw: true
},
server: {
poolSize: 5
}
},
function(err, database) {
exports.db = database;
if(err == null)
start_server();
}
);
}
exports.db = null;
// file: test.js
var mongodb = require('./db.js');
var db = require('./db.js').db;
console.log("MongoDb " + mongodb.db);
console.log("DB " + db);
输出: MongoDb [object Object] DB null
Q值。变量db
现在为空但mongodb.db
有值?
即使我在变量中指定mongodb.db
的值,该值也将为null。
答案 0 :(得分:2)
var mydb = require('module');
这将获得整个模块。
var mydb = require('module').db;
这将获取模块返回的对象的属性db
。
后一部分的缺点是你无法访问"父母"对象,即。无论从.db
电话中返回什么,都将是你得到的,而不是别的。
快速举例:
//some_module.js
var SomeModule = {
db: function () {
console.log("hello");
}
};
module.exports = SomeModule;
//some_other_module.js
var SomeModule = require('./some_module.js');
console.log(SomeModule); // [Object object]
var SomeDB = require('./some_module.js').db;
console.log(SomeDB); // function () {}
答案 1 :(得分:0)
它基本上不同
var mydb = require('module');
这意味着您导出的每个object
都将被调用/导入。 mydb.doA
和mydb.db
可用。
var db = require('module').db;
只有db
对象被调用/导入到您的代码中。与第一个示例不同,db
自我就像第一个示例中的mydb.db
。