首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-mongodb-native:如何通过我的应用程序共享连接回调的db api对象

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

Stack Overflow用户
提问于 2012-12-14 00:01:10
回答 1查看 1.5K关注 0票数 2

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

所以我在这个话题上还是个新手。然而,我目前的问题是想要在服务器启动时创建一个数据库集合,然后我可以通过应用程序使用它。不幸的是,我只能在存储库中找到这样的示例,您只能在connect函数的回调中直接执行数据库操作。

文档:

代码语言:javascript
复制
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.
});

但是,当我在某个路由回调中时,如何访问回调中的db对象呢?目前,我唯一的想法是将应用程序包装到回调中:

代码语言:javascript
复制
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);
            });
        });
    });

});

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

有没有办法创建一个同步数据库连接调用,然后我可以很容易地在整个应用程序中使用,就像mongoose一样?

致敬博多

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-14 00:48:22

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

你所想要的就是推迟启动你的express应用程序,监听它的端口并接收请求,直到你的mongodb连接建立。

所以你可以这样做:

代码语言:javascript
复制
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进程,则此解决方案不允许您重新创建连接。因此,尽管上面的方法可能行得通,但创建一个方法来包装创建到mongodb的连接可能是一个更好的主意。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13863675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档