MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

NodeJS Express Dependency Injection i połączenia z bazą danych

Zaktualizowana odpowiedź:15.05.2015

Jeśli chcesz dołączyć połączenie DB do każdego obiektu żądania, użyj tego połączenia w swojej usłudze, połączenie będzie musiało zostać przekazane do myService jakoś. Poniższy przykład pokazuje jeden ze sposobów na zrobienie tego. Jeśli spróbujemy użyć db.current lub coś w tym stylu, będziemy przechowywać stan w naszym module DB. Z mojego doświadczenia wynika, że ​​doprowadzi to do kłopotów.

Alternatywnie przedstawiam podejście, którego użyłem (i nadal używam) w ta poprzednia odpowiedź . Oznacza to dla tego przykładu, co następuje:

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

Dzięki takiemu podejściu oddzieliliśmy moduł DB od modułów api/app/router i tylko moduł, który faktycznie z niego korzysta, będzie wiedział, że istnieje.

Poprzednia odpowiedź:15.01.2015

To, o czym mówisz, można zrobić za pomocą ekspresowego oprogramowania pośredniczącego. Oto jak to może wyglądać:

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

Osobiście nigdy nie widziałem czegoś takiego jak new MyService wcześniej w aplikacjach ekspresowych. To nie znaczy, że nie da się tego zrobić, ale możesz rozważyć takie podejście

// 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. R :Aktualizacja wpisu w mongodb przy użyciu mongolitu

  2. Czy istnieje sposób na umieszczenie całej wartości zero na końcu podczas sortowania za pomocą mongodb/mongoid?

  3. Agregacja Pymongo - przekazywanie listy Pythona do agregacji

  4. Błąd MongoDB:nie można użyć wielokrotnego zapisu z limitem=0

  5. Pobieranie pojedynczego obiektu z mongodb w C#