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

2024-01-07

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

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

docs:

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 对象呢? 目前我唯一的想法是将应用程序包装到回调中:

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);
            });
        });
    });

});

但我不认为这应该是这样的?

有没有办法创建一个同步数据库连接调用,然后我可以像猫鼬一样在整个应用程序中轻松使用它?

问候博多


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

您想要的只是推迟启动 Express 应用程序侦听其端口并接收请求,直到建立与 mongodb 的连接。

所以你可以做的是:

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 连接的创建可能是更好的主意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐