我想首先连接到mongodb,然后在我的应用程序中运行其他所有内容。
要做到这一点,我必须写一些像:
MongoClient.connect("mongodb://localhost/test", function(err, connection) {
if (err) { console.error(err); }
db = connection;
var app = express();
// Include API V1
require("./apiv1.js")(app, db);
app.listen(3000, function(err) {
if (err) { console.error(err); } else { console.log("Started on *:3000"); }
});
});
这使得我的应用程序在.connect函数中完全缩进...在我处理项目时,它看起来很丑陋,占用空间。
我认为最好的解决方案是将MongoDB连接同步(即使因为没有数据库连接,我的应用程序无法工作,所以为什么我应该在连接时做一些事情?)然后运行我的其余代码。
我该怎么办?
答案 0 :(得分:30)
你无法同步连接到MongoDB,但你可以从你的代码中删除这个丑陋的回调。
最好的方法是在node-mongodb-native
driver周围采用一些包装。
看看以下模块。
var mongojs = require('mongojs');
var db = mongojs('localhost/test');
var mycollection = db.collection('mycollection');
var mongo = require('mongoskin');
var db = mongo.db("mongodb://localhost:27017/test", {native_parser:true});
var monk = require('monk');
var db = monk('localhost/test');
var users = db.get('users')
当然,内部所有人都是异步建立MongoDB连接。
答案 1 :(得分:3)
使用async
库,您可以解决其中的一些问题。
例如,在我的服务器启动中,我执行以下操作:
async.series([
function(callback){
// Initialize the mongodb connection and callback on completion in init.
db.init(function(){
callback();
});
},
function(callback){
// Listen on requests etc.
webServer.init(function(){
callback();
});
},
function(callback){
// Set up anything else that I need
callback();
}
]);
答案 2 :(得分:0)
如果您使用的是Node 6及更高版本,则可以执行以下操作:
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017/mydb';
let db = null;
getdb();
//your code
async function getdb() {
db = await MongoClient.connect(url);
}
答案 3 :(得分:0)
您可以使用thunky执行此操作,thunky执行一次异步功能并缓存它,后续调用将从缓存中返回。
const MongoClient = require('mongodb').MongoClient;
const thunky = require('thunky');
var connect = thunky(function(cb){
let url = 'mongodb://localhost:27017/test';
MongoClient.connect(url, function(err, client){
console.log('connecting')
cb(err, client);
})
})
connect( (err, client) => {
console.log('connection 1')
})
connect( (err, client) => {
console.log('connection 2')
})
connect( (err, client) => {
console.log('connection 3')
console.log('closing')
client.close();
})
*注意:我使用的是最新的3.x mongodb驱动程序