sql >> データベース >  >> NoSQL >> MongoDB

NodeJSExpressの依存性注入とデータベース接続

    更新された回答:05/02/15

    各リクエストオブジェクトにDB接続をアタッチし、サービスでその接続を使用する場合は、接続をmyServiceに渡す必要があります。 何とかして。以下の例は、それを行う1つの方法を示しています。 db.currentを使おうとすると またはその趣旨で、DBモジュールに状態を保存します。私の経験では、それはトラブルにつながります。

    または、この前の回答 。この例でこれが意味することは次のとおりです。

    // api.js
    var MyService = require(./services/MyService')
    
    ...
    
    router.get('/foo/:id?', function (req, res) {
        MyService.performTask(req.params.id);
    });
    
    
    // MyService.js
    var db = require('db');
    module.exports = {
       performTask: function(id)
          {
             var connection = db.getOpenConnection();
             // Do whatever you want with the connection.
          }
    }
    

    このアプローチでは、DBモジュールをapi / app / routerモジュールから切り離し、実際にそれを使用するモジュールのみがDBモジュールが存在することを認識します。

    前の回答:2015年5月1日

    あなたが話していることは、エクスプレスミドルウェアを使用して行うことができます。表示される内容は次のとおりです。

    var db = require('db');
    
    // Attach a DB connection to each request coming in
    router.use(req, res, next){
       req.locals.db = db.getOpenConnection();
       next();
    }
    
    // Later on..
    router.get('/foo/:id?', function (req, res) {
      // We should now have something attached to res.locals.db!
      var service = new MyService(res.locals.db);
    });
    

    私は個人的にnew MyServiceのようなものを見たことがありません エクスプレスアプリケーションの前に。それができないという意味ではありませんが、このようなアプローチを検討するかもしれません

    // router.js
    var MyService = require('MyService');
    router.get('/foo/:id?', function (req, res) {
      MyService.foo(res.locals.db);
    });
    
    // MyService.js
    module.exports.foo(connection){
      // I have a connection!
    }
    



    1. HBaseでのバックアップとディザスタリカバリへのアプローチ

    2. mongodbの集約で特定のフィールドを持つドキュメントをグループ化する方法

    3. Mongooseの$pushメソッドが機能しません

    4. mongodbのジャーナルファイルを削除しても安全ですか?