[英]Node + MongoDB - connection pool - mongoldb-native
我正在嘗試實現一個優雅的代碼來解決與 node-mongoldb-native 的連接池。 但是,我沒有成功為此做一個模塊。 我確定這與提升有關,但我無法理解。
mongodb.js
'use strict';
var client = require('mongodb').MongoClient;
var connectionString = undefined;
var db = undefined;
switch(process.env.NODE_ENV) {
case 'production':
connectionString = process.env.MONGOLAB_URI;
break;
case 'test':
connectionString = 'mongodb://localhost:27017/test';
break;
default:
connectionString = 'mongodb://localhost:27017/development';
}
client.connect(connectionString, function(err, database) {
if (err) throw err;
console.log('MongoDB running on ' + (process.env.NODE_ENV || 'development') + ' environment');
database.on('error', function(err) {
throw err;
});
db = database;
});
module.exports = db;
應用程序.js
var express = require('express');
var app = express();
var db = require('./lib/mongodb');
var professional = require('./routes/professional');
app.use('/professional', professional);
db.listCollections().toArray()
.then(function(items) {
console.log(items);
});
module.exports = app;
安慰
Julios-MacBook-Air:klou juliocoelho$ ./bin/www
/Users/juliocoelho/Projects/klou/app.js:10
db.listCollections().toArray()
^
TypeError: Cannot read property 'listCollections' of undefined
at Object.<anonymous> (/Users/juliocoelho/Projects/klou/app.js:10:3)
at Module._compile (module.js:435:26)
at Object.Module._extensions..js (module.js:442:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:311:12)
at Module.require (module.js:366:17)
at require (module.js:385:17)
at Object.<anonymous> (/Users/juliocoelho/Projects/klou/bin/www:3:11)
at Module._compile (module.js:435:26)
at Object.Module._extensions..js (module.js:442:10)
由於 node.js 的異步特性,需要導出一個回調賦值方法來獲取變量,並在異步執行時調用它。 下面的代碼更好地解釋了它:
'use strict';
var client = require('mongodb').MongoClient;
var connectionString = undefined;
var db, callback;
switch(process.env.NODE_ENV) {
case 'production':
connectionString = process.env.MONGOLAB_URI;
break;
case 'test':
connectionString = 'mongodb://localhost:27017/test';
break;
default:
connectionString = 'mongodb://localhost:27017/development';
}
client.connect(connectionString, function(err, database) {
if (err) throw err;
console.log('MongoDB running on ' + (process.env.NODE_ENV || 'development') + ' environment');
database.on('error', function(err) {
throw err;
});
db = database;
if( typeof callback == 'function' ){
callback(db);
}
});
module.exports = function(cb){
if(typeof db != 'undefined'){
cb(foo); // If db is already defined, don't wait.
} else {
callback = cb;
}
}
應用程序.js
var dbModule = require('./lib/mongodb');
dbModule(function(db){
//Here code using db;
db.listCollections()
.toArray()
.then(function(items) {
console.log(items);
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.