当函数在节点js中导出时,导出的变量未定义

时间:2016-10-25 05:06:42

标签: javascript node.js mongodb

我正在创建使用mongodb的nodejs应用程序。

我只连接一次mongodb。我想在所有其他api中使用db以实现连接池。

我有以下mongodb连接代码:

var mongodb = require('mongodb');

var MongoClient = require('mongodb').MongoClient;
var db;

var mongoUrl = "mongodb://localhost:27017/testDB";
/**
 * Connects to the MongoDB Database with the provided URL
 */


exports.connect = function(callback){
    if(!db){
        MongoClient.connect(mongoUrl, function(err, _db){
            if (err) { throw new Error('Could not connect: '+err); }
            db = _db;
            console.log(db);
            connected = true;
            console.log(connected +" is connected?");
            callback(db);
        });     
    }else{
        console.log("Not connected tis time as I am already connected");
        callback(db);
    }

};


exports.db = db;

当服务器从connect启动时,我只调用app.js一次。每当调用signin, register之类的其他api时,他们应该只使用导出的db。

所以我的api调用会像(请忽略api调用中的语法错误:D):

var mongo  = require('./mongo');

collection = mongo.db.collection("testCollection");
// Here mongo.db id undefined
collection.findOne({"name":"John"}, function(err, result){
   // Do your stuff with result here
});

从其他stackoverflow帖子中,我尝试了类似于mongo.js的内容

module.export{
db: db,
connect : function(callback){
  //function code goes here
}
}

但我仍然获得undefined的{​​{1}} 我如何在其他文件中访问mongo.db? 感谢

3 个答案:

答案 0 :(得分:1)

此连接添加主脚本文件...

var mongodb = require('mongodb');
var mongodb = require('mongodb');
var MongoClient = require('mongodb').MongoClient;
var mongoUrl = "mongodb://localhost:27017/testDB";


ObjectId = module.exports = require("mongojs").ObjectId;
MongoClient.connect(mongoUrl, function(err, database){
    if(err){
        console.log("mongodb error >>"+err);    
    } else {
        db = module.exports = database;
    }});


db.collection('game_users').findOne({_id:ObjectId("123456789")},function(err, data) {});

答案 1 :(得分:0)

发生这种情况的原因是,因为连接会覆盖模块中的db。调用exports.db=db;函数后,执行模块导入时,不会执行connect

因此,当您调用connect时,db将设置为另一个变量,但不会在外部公开。

最近没有做过很多JS,但是应该这样做:

module.exports = new mongobj();

function mongobj() {
   this.db = null;
   this.connect = function(callback) { /* your connect code set mongobj.db */
      this.db = /* new value */ ;
   }
}

导入模块时,您将获得该对象。访问对象db属性将始终显示模块的db函数设置的最新connect值。

var mongo = require('yourmodule');

// mongo.db is null
mongo.connect(some callback);
// mongo.db is set

答案 2 :(得分:0)

定义一个对象:

string

然后:

var db = {__db: undefined}