Nodejs - require(' module')和require(' module')之间的差异.db?

时间:2014-12-26 20:43:42

标签: node.js

//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。

2 个答案:

答案 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.doAmydb.db可用。

var db = require('module').db;

只有db对象被调用/导入到您的代码中。与第一个示例不同,db自我就像第一个示例中的mydb.db