node-mongodb-native:如何通过我的应用程序共享连接callback的db api对象

我正在从mongoose回滚到node-mongodb-native。

所以我在这个话题上是相当新的。 然而,我现在的问题是,想在服务器启动,然后我可以通过应用程序使用创build一个数据库集合。 不幸的是,我只能在存储库中find实例,只能在connect函数的callback中直接执行数据库操作。

文档:

var mongodb = require("mongodb"), mongoServer = new mongodb.Server('localhost', 27017), dbConnector = new mongodb.Db('example', mongoServer); db_connector.open(function(err, db) { if (err) throw new Error(err); // here I can do my queries etc. }); 

但是当我在某个路由callback中的时候,我怎样才能访问callback中的db对象呢? 目前我唯一的想法是将应用程序包装到callback中:

 var mongodb = require("mongodb"), express = require("express"), mongoServer = new mongodb.Server('localhost', 27017), dbConnector = new mongodb.Db('example', mongoServer); var app = new express(); db_connector.open(function(err, db) { if (err) throw new Error(err); app.get('/products', function(req, res, next) { db.collection('products', function(err, collection) { if (err) next(new Error(err)); collection.find({}, function(err, products) { res.send(products); }); }); }); }); 

但我不认为这是应该的方式?

是不是有办法创build一个同步数据库连接调用,然后我可以轻松地通过整个应用程序如何通过mongoose使用?

关于博多

Db.open打开连接到mongodb并返回一个对自身的引用。 看到这里的源代码: https : //github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/db.js#L245

所有你想要的是暂停开始你的快速应用程序监听它的端口和接收请求,直到你的连接到MongoDB已经build立。

所以你可以做的是这样的:

 var mongodb = require("mongodb"), express = require("express"), mongoServer = new mongodb.Server('localhost', 27017), dbConnector = new mongodb.Db('example', mongoServer), db; var app = new express(); app.get('/products', function(req, res, next) { db.collection('products', function(err, collection) { if (err) next(new Error(err)); collection.find({}, function(err, products) { res.send(products); }); }); }); db_connector.open(function(err, opendb) { if (err) throw new Error(err); db = opendb; app.listen(3000); }); 

我不确定的是这是不是一个好主意。 如果出现连接中断或者重新启动了MongoDB进程,此解决scheme不允许重新创build连接。 所以,虽然上面的可能工作,创build一个方法可能是一个更好的主意,将包装创build一个连接到mongodb。