sql >> Database teknologi >  >> NoSQL >> MongoDB

NodeJS Express Dependency Injection og Database Connections

Opdateret svar:05/02/15

Hvis du vil knytte en DB-forbindelse til hvert anmodningsobjekt, så brug den forbindelse i din tjeneste, forbindelsen skal videregives til myService noget hvordan. Eksemplet nedenfor viser en måde at gøre det på. Hvis vi prøver at bruge db.current eller noget i den retning, vi gemmer tilstand i vores DB-modul. Efter min erfaring vil det føre til problemer.

Alternativt opstiller jeg den tilgang, jeg har brugt (og stadig bruger) i dette tidligere svar . Hvad dette betyder for dette eksempel er følgende:

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

Med denne tilgang har vi afkoblet DB-modulet fra api/app/router-modulerne, og kun det modul, der rent faktisk bruger det, ved, at det eksisterer.

Forrige svar:05/01/15

Det, du taler om, kunne gøres ved hjælp af en ekspres-middleware. Sådan kan det se ud:

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

Jeg personligt har aldrig set noget lignende new MyService før i ekspresansøgninger. Det betyder ikke, at det ikke kan lade sig gøre, men du kan overveje en tilgang som denne

// 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. sql 'like' operationer på tal i mongodb

  2. Hvordan kan vi oprette autogenereret felt til mongodb ved hjælp af fjederstøvle

  3. Mongodb:$in-operator vs. mange enkelte forespørgsler

  4. redis og watch + multi tillader samtidige brugere