我正在创建使用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?
感谢
答案 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}