response.js 978 B

123456789101112131415161718192021222324252627282930313233343536
  1. var R = require('ramda');
  2. var LANGS = [ 'ES', 'EN' ];
  3. var DEFAULT_LANG = 'ES';
  4. function selectLang(lang) {
  5. return function(x) {
  6. if(R.is(String, x)) {
  7. return x;
  8. } else {
  9. if (R.isNil(R.prop(lang, x))) {
  10. return x;
  11. } else {
  12. var x_ = x.toObject();
  13. x_ = R.merge(x_, R.prop(lang, x_));
  14. return R.omit(LANGS, x_);
  15. }
  16. }
  17. }
  18. }
  19. module.exports = function (fn) {
  20. return function (req, res, next) {
  21. var projection = req.headers.lang ? req.headers.lang : DEFAULT_LANG;
  22. return fn(req, res, next).then(function (xs) {
  23. var result = R.is(Array, xs) ? xs.map(selectLang(projection)) : selectLang(projection)(xs);
  24. res.json(result);
  25. }, function (error) {
  26. console.error('API: ', error)
  27. res.status(500).json({error: error});
  28. })
  29. }
  30. }