0.4.0 • Published 6 years ago

mongo-ext-populate v0.4.0

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

NodeJS MongoDB external populate for microservices

A MongoDb attribute population between different microservices, performed by kue library.

Installation

npm install mongo-ext-populate --save

Add to your project's .env file the variables like in the example (.env.sample).

Usage

Microservice A

The microservice A must call the function addListener to be notified when it has to make a query to populate an attribute.

var extPopulate = require('mongo-ext-populate');

var name = 'key';     //key (eg. attribute name)
var params = {
  connectionString: 'mongodb://localhot:27017/db-name',     //connection string to database
  collection: 'collectionName'    //collection name
}

extPopulate.addListener(name, params, function (err, response) {
  console.log(response); // "Callback registered"
});

Microservice B

The microservice B may request an attribute population by using:

  • a function with callback
  • an Express middleware

Function

var extPopulate = require('mongo-ext-populate');

var id = '1';     //MongoDb ID or array of IDs
var attribute = 'key';     //equals to "name" attribute used by microservice A
var fields = {attr1: 1, attr2: 1, attr3: 0}    //fields

extPopulate.populate(id, attribute, fields, function (err, result) {
  //result is the populated object (or array of objects)
});

Middleware

var ExtPopulate = require('mongo-ext-populate');
var express = require('express');
var router = express.Router();

var resultKey = 'key';
var extPopulate = new ExtPopulate(resultKey).PopulateMiddleware;

var attribute = 'key';     //equals to "name" attribute used by microservice A
var fields = {attr1: 1, attr2: 1, attr3: 0}    //fields selection


router.route('/api-route')
  .get(
    function (req, res, next) {
      res[resultKey] = '1' //id to be populates
    },
    extPopulate.populate(attribute, fields),
    function (req, res, next) {
      //res[resultKey] now contains the populated object
    },
    //other middlewares...
  )

Test

Setup

  • Create .env.test file (copy and rename .env.sample).
  • Create logs/test.log file.

Run tests

npm test

Coverage

npm run-script test-travis

License

MIT license