2016-08-04 8 views
0

mongodb MongoClientを使用してデータベースに接続し、db変数をアプリ全体の他の場所で使用しようとしています。私はthe documentsで提供されているパターンに従っています。しかし何らかの理由で私のdb変数が来ていますundefined。ここに私のコードだ:mongo.jsmongodb 'db'を別のnode.jsモジュールにエクスポート

Question.js
var Db = require('mongodb').Db, 
    MongoClient = require('mongodb').MongoClient, 
    Server = require('mongodb').Server; 

var dbconnection; 

MongoClient.connect("mongodb://127.0.0.1/smartmonthly", function (err, db) { 
    if (err) { 
    console.log("connection err ", err); 
    throw err; 
    } else { 
    console.log("successfully connected to the database"); 
    this.dbconnection = db; 
    } 
}); 

module.exports.dbconnection = dbconnection; 

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

module.exports = { 
    all: function() { 

    var questionsCursor = mongo.dbconnection.collection('Question').find({"Vertical": "Cellular"}); 
    questionsCursor.toArray(function(err, documents) { 
     console.log("documents length ", documents.length); 
     questions = documents; 
     mongo.db.close(); 
     return questions; 
    }); 
} 
} 

このコードは、エラーがスローされます。この行のTypeError: Cannot read property 'collection' of undefined

var questionsCursor = mongo.dbconnection.collection('Question').find({"Vertical": "Cellular"}); 

私は何をしないのです?

+0

は、あなたがのDBConnection =デシベルを行う必要があります。 this.dbconnection = dbの代わりに。 –

+0

私はそれを試みましたが、同じエラーが発生します。 – Eddy

+0

module.exports.dbconnection = dbconnectionです。コールバックの前に実行されるため、エクスポートされたdbconnectionが定義されていません。 –

答えて

0

dbconnectionは、コールバック関数で定義されている場合はエクスポートできません。あなたがmongodb connneciton instanceを再利用したい場合は、ネイティブのMongoDBドライバ(詳細ビューoffical node monogodb driver)から機能使用の約束をエクスポートすることもできます

db.js

`use strict'; 
var MongoClient = require("mongodb").MongoClient; 
function getDb() { 
    return MongoClient.connect(yourConnString).then(function (db) { 
     return db; 
    }) 
} 

module.exports = getDb(); 

example.js

'use strict'; 
var getDbIns = require('./db'); 
getDbIns.then(function (db) { 
var col = db.collection("tmp"); 
return col.insertOne({name: 'test'}).then(function (res) { 
     console.log(res.insertedCount); 
     db.close(); 
     return res.insertedCount; 
    }) 
}); 
関連する問題