2017-01-28 8 views
0

ルータ(コントローラ)で使用するためにdbオブジェクトをエクスポートできません。相続人は、私はデータベースに接続し、DBオブジェクトをエクスポートしようとしたファイル:ルータのNodeJS/ExpressでMongodbの 'db'にアクセス

var MongoClient = require('mongodb').MongoClient 
, assert = require('assert'); 

// Connection URL 
var url = 'mongodb://localhost:27017/database'; 

// Use connect method to connect to the server 
var database; 

MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    console.log("Connected successfully to server"); 

    database = db; 
    module.exports = database; 
}); 

と私は私のルータの1つに、それを使用してみてください:

var db = require('../path/to/file/above'); 

// Redirect to application 
router.get('/', function(req, res, next) { 
    try { 
     db.close(); 
    } catch (err) { 
     console.log(err); 
    } 
    res.render('index',{}); 
}); 

「はconsole.log( err) "は" db.close()は関数ではありません "と述べています。

Q:ルーターで使用できるようにdbオブジェクトを正しくエクスポートするにはどうすればよいですか?

答えて

0

は、私はあなたのmodule.exportsはあなたがMongoDBのにアクセスするためにmongoskinを使用することができますし、DBオブジェクトをエクスポートすることができ、この

var MongoClient = require('mongodb').MongoClient 
    , assert = require('assert'); 

    // Connection URL 
    var url = 'mongodb://localhost:27017/database'; 

    // Use connect method to connect to the server 
    var database; 

    function connectMongo(cb){ 
     MongoClient.connect(url, function(err, db) { 
      assert.equal(null, err); 
      console.log("Connected successfully to server"); 

      cb(db); 
     }); 
    } 

    module.exports = connectMongo; 
+0

これは、データベース(ルータごとに少なくとも1つに複数の接続をもたらさない、必要あたり1つの接続を想定)? – Dazing

0

を試してみて、いくつかの問題があると思います。

var mongo = require('mongoskin'); 
var url = 'mongodb://localhost:27017/database'; 

var db = mongo.db(url, {native_parser:true}); 

module.exports = db; 

そして、あなたのルータに、

var db = require('../path/to/file/above'); 

// Redirect to application 
router.get('/', function(req, res, next) { 
    try { 
    //some db operations 
    } catch (err) { 
    console.log(err); 
    } 
    res.render('index',{}); 
}); 

他のソリューションは、@Asifにより示唆されるようにコールバックを渡すことです。

0

これは私のデータベースファイル(database.js)があることを終わったものです:のために(あなたは(router.getにget関数を呼び出す必要があることに注意してください)

var MongoClient = require('mongodb').MongoClient 
    , assert = require('assert'); 

var express = require('express'); 
var app = express(); 

// Connection URL 
var url = 'mongodb://localhost:27017/database'; 

// Use connect method to connect to the server 
var database; 

MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    database = db; 
}); 

// Returns DB object when called 
module.exports.get = function() { 
    return database; 
} 

とこのようにそれを使用して例えば、)まだ接続が開いていないので動作しませんそれを直接呼び出す:

var database = require('./database.js'); 
var assert = require('assert'); 
var express = require('express'); 
var router = express.Router(); 

// Redirect to application 
router.get('/', function(req, res, next) { 
    var db = database.get(); 
    // Mongo Query here 
    res.render('index',{}); 
});