Node.js Nodejs-require(';模块';)和require(';模块';)之间的差异.db?

Node.js Nodejs-require(';模块';)和require(';模块';)之间的差异.db?,node.js,Node.js,varmydb=require('module')是如何实现的不同于varmydb=require('module').db 更新:使用我观察到的代码和行为进行更新 //module.js exports.doA = function(callback) { db.asyncConnect(/* connect options */, function(err, database) { if(err == null) { exports.db = dat

var
mydb=require('module')是如何实现的不同于var
mydb=require('module').db

更新:使用我观察到的代码和行为进行更新

//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);

输出: MongoDb[对象] 数据库空值

变量
db
为空,但是
mongodb.db
有值吗? 即使我在一个变量中指定
mongodb.db
的值,该值也是空的

// file: test.js
var mongodb = require('./db.js');
var db = require('./db.js').db;

console.log("MongoDb " + mongodb.db);
console.log("DB " + db);
这将获得整个模块

var mydb = require('module');
这将获取模块返回的对象的属性
db

后一部分的缺点是,您不能再访问“parent”对象了,即从
.db
调用返回的任何内容都将是您得到的内容,而没有其他内容

快速示例:

var mydb = require('module').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 () {}
这意味着您导出的每个
对象都将被调用/导入
mydb.doA
mydb.db
可用

var mydb = require('module');
只有
db
对象被调用/导入到您的代码中。与第一个示例不同,
db
它本身就像第一个示例中的
mydb.db

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