2

現在、mongoose から node-mongodb-native にロールバックしています。

したがって、私はこのトピックではまったく新しいです。ただし、現在の私の問題は、サーバーの起動時にデータベース コレクションを作成し、それをアプリケーションから使用できるようにすることです。残念ながら、接続関数のコールバックでデータベース アクションを直接実行することしかできない例は、リポジトリでしか見つかりません。

ドキュメント:

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

});

しかし、これが本来あるべき姿だとは思いませんか?

Mongoose のように、アプリケーション全体で簡単に使用できる同期データベース接続呼び出しを作成する方法はありませんか?

よろしくボド

4

1 に答える 1

3

Db.openは、mongodbへの接続を開き、それ自体への参照を返します。ソースコードについては、こちらをご覧ください:https ://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/db.js#L245

必要なのは、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への接続の作成をラップするメソッドを作成することをお勧めします。

于 2012-12-13T16:48:21.970 に答える