sql >> Databáze >  >> NoSQL >> MongoDB

NodeJS Express Dependency Injection a databázová připojení

Aktualizovaná odpověď:2. 5. 2015

Pokud chcete ke každému objektu požadavku připojit DB připojení, pak toto připojení použijte ve své službě, připojení bude muset být předáno myService Nějak. Níže uvedený příklad ukazuje jeden způsob, jak toho dosáhnout. Pokud se pokusíme použít db.current nebo něco v tomto smyslu, budeme ukládat stav do našeho DB modulu. Podle mých zkušeností to povede k potížím.

Případně uvádím přístup, který jsem používal (a stále používám) v tato předchozí odpověď . Pro tento příklad to znamená následující:

// 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.
      }
}

Díky tomuto přístupu jsme oddělili modul DB od modulů api/app/router a pouze modul, který jej skutečně používá, bude vědět, že existuje.

Předchozí odpověď:05/01/15

To, o čem mluvíte, by se dalo udělat pomocí expresního middlewaru. Zde je návod, jak to může vypadat:

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

Osobně jsem nikdy neviděl něco jako new MyService dříve v expresních aplikacích. To neznamená, že to nelze udělat, ale můžete zvážit takový přístup

// 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. Celkový počet hodin sběru objektů Mongodb

  2. MongoDB Write Concern:3 Must Know Caveats

  3. Mapování BsonArray na seznam<> v POCO

  4. Embedded Redis pro Spring Boot