Home Reference Source

node-user-accounts-boilerplate-nahid/helper/bootstrap.js

const requestIp = require('request-ip');
const success = require('./success');
const error = require('./error');
const audit = require('./audit');
const resolve = require('./resolve');
const reject = require('./reject');

/**
 * Out boilerplate to make things easier.
 * 
 * @return {ExpressMiddleware} a middleware that will attach a bunch of convenience properties and functions to req and res.
 */
function bootstrap(app, config)
{
  // helper function
  config.audit = config.audit || app.audit || audit;
  app.audit = config.audit;

  return function (req, res, next)
  {
    req.clientIp = requestIp.getClientIp(req);
    req.audit = res.audit = function ()
    {
      let source = `${req.user ? req.user.id : 'anonymous'}@${req.clientIp}`;

      app.audit.apply(null, [source].concat(Array.prototype.slice.call(arguments)));
    };
    res.success = success.bind(null, res);
    res.error = error.bind(null, res);
    res.reject = reject.bind(null, res);
    res.resolve = resolve.bind(null, res);
    next();
  }
}

module.exports = bootstrap;