2016-10-25 12 views
0

mongodbを使用するnodejsアプリケーションを作成しています。エクスポートされた変数は、ノードjsで関数がエクスポートされる間に未定義になりました

私は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; 

サーバがapp.jsから開始したとき、私は一度だけconnectを呼び出しています。 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の記事から、私は

module.export{ 
db: db, 
connect : function(callback){ 
    //function code goes here 
} 
} 
としてmongo.jsのようなものを試してみました

でもまだ私はundefinedを取得していますmongo.db 他のファイルでmongo.dbにどうやってアクセスしますか? ありがとう

答えて

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にアクセスすると、モジュールのconnect機能によって設定された最新のdb値が常に公開されます。

var mongo = require('yourmodule'); 

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

を、その後どのように私が更新になるだろう値?道があるか、それは不可能か –

0

オブジェクトを定義します。

var db = {__db: undefined} 

、その後:

exports.db = db 
const db = require('./mongo').db.__db 
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) {}); 
関連する問題