同步连接到MongoDB

我想先连接到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函数中被完全缩进。当我在处理我的项目时,这看起来很丑并占用空间。

我认为最好的解决scheme是使MongoDB连接同步(即使因为数据库连接我的应用程序无法工作,为什么我应该在连接时做些什么),然后运行我的代码的其余部分。

我能怎么做?

你不能同步连接到MongoDB,但是你可能会从你的代码中摆脱这个丑陋的callback。

最好的办法是采用node-mongodb-native驱动程序的一些包装。

看看下面的模块。


mongojs

 var mongojs = require('mongojs'); var db = mongojs('localhost/test'); var mycollection = db.collection('mycollection'); 

mongoskin

 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') 

当然,他们内部都是asynchronousbuild立MongoDB连接。

使用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(); } ]); 

如果您使用的是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); } 
  1. 带上mongodb库。
  2. 声明url常量。
  3. 声明variablesdb为空。
  4. 调用getdb函数。
  5. 创build具有asynchronous字的getdb函数
  6. 为dbvariables分配与关键字await连接的结果。