Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js node mongodb native:如何通过应用程序共享连接回调的db api对象_Node.js_Mongodb_Express_Node Mongodb Native - Fatal编程技术网

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

Node.js node mongodb native:如何通过应用程序共享连接回调的db api对象,node.js,mongodb,express,node-mongodb-native,Node.js,Mongodb,Express,Node Mongodb Native,我目前正在从mongoose回滚到节点mongodb native 所以我对这个话题还很陌生。然而,我目前的问题是,我想在服务器上创建一个数据库集合,然后通过应用程序使用它。不幸的是,我在存储库中只找到了一些示例,您只能在connect函数的回调中直接执行数据库操作 文件: 但是,当我在某个路由回调中时,如何访问回调中的db对象呢? 目前我唯一的想法是将应用程序包装到回调中: var mongodb = require("mongodb"), express = require("exp

我目前正在从mongoose回滚到节点mongodb native

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

文件:

但是,当我在某个路由回调中时,如何访问回调中的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);
            });
        });
    });

});
但我不认为这是应该的方式

难道没有办法创建一个同步数据库连接调用,然后我可以像mongoose那样轻松地在整个应用程序中使用它吗


关于bodoDb.open打开与mongodb的连接并返回对其自身的引用。有关源代码,请参见此处:

您只需推迟启动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的连接的创建

嗨,我想这是正确的方法。我还发现了一些在这方面起作用的例子:
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);
});