MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

NodeJS Express Dependency Injection и връзки към бази данни

Актуализиран отговор:05/02/15

Ако искате да прикачите DB връзка към всеки обект на заявка, след това използвайте тази връзка във вашата услуга, връзката ще трябва да бъде предадена на myService някак си. Примерът по-долу показва един начин за това. Ако се опитаме да използваме 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 и само модулът, който действително го използва, ще знае, че съществува.

Предишен отговор:01.05.15

Това, за което говорите, може да се направи с помощта на експресен междинен софтуер. Ето как може да изглежда:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да конфигурирам mongodb за премахване на стари регистрационни файлове?

  2. Попълване на мангуста след запазване

  3. Първи стъпки с Node.js, angular.js и MongoDB, моделиране на връзки и други съвети за повишаване

  4. MongoDb:Как да вмъкна допълнителен обект в колекция от обекти в golang?

  5. Сортиране на резултатите от заявката по реда на елементите в предоставения масив с условия в Mongoose