浏览代码

Add endpoint to get categories

Tati 9 年之前
父节点
当前提交
bdd5b24948
共有 4 个文件被更改,包括 52 次插入8 次删除
  1. 10 0
      back/api/products/controller.js
  2. 2 0
      back/api/products/index.js
  3. 25 5
      back/app.js
  4. 15 3
      back/components/middlewares/response.js

+ 10 - 0
back/api/products/controller.js

@@ -1,7 +1,17 @@
 'use strinct';
 
 var Product = require('./model');
+var R = require('ramda');
 
 module.exports.all = function (req, res, next) {
     return Product.find({});
 }
+
+module.exports.category = function (req, res, next) {
+    var query = R.objOf(req.headers.lang + '.category._id', req.params.category );
+    return Product.find(query);
+}
+
+module.exports.listCategories = function (req, res, next) {
+    return Product.distinct(req.headers.lang + '.category');
+}

+ 2 - 0
back/api/products/index.js

@@ -7,5 +7,7 @@ var controller = require('./controller');
 var response = require('./../../components/middlewares/response');
 
 router.get('/all', response(controller.all));
+router.get('/category/:category', response(controller.category));
+router.get('/listcategories', response(controller.listCategories));
 
 module.exports = router;

+ 25 - 5
back/app.js

@@ -1,6 +1,6 @@
 /**
- * Main application file
- */
+* Main application file
+*/
 
 'use strict';
 
@@ -16,6 +16,26 @@ app.get('/', function (req, res) {
   res.send('Hello World!')
 })
 
-app.listen(3000, function () {
-  console.log('Example app listening on port 3000!')
-})
+function allowCrossDomain(req, res, next) {
+  res.header('Access-Control-Allow-Origin', '*');
+  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
+  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
+  
+  // intercept OPTIONS method
+  if ('OPTIONS' === req.method) {
+    res.send(200);
+  }
+  else {
+    next();
+  }
+}
+
+app.use(allowCrossDomain);
+
+try {
+  app.listen(3000, function () {
+    console.log('Example app listening on port 3000!')
+  })
+} catch (error) {
+  console.error(error);
+}

+ 15 - 3
back/components/middlewares/response.js

@@ -4,9 +4,17 @@ var DEFAULT_LANG = 'ES';
 
 function selectLang(lang) {
     return function(x) {
-        var x_ = x.toObject();
-        x_ = R.merge(x_, R.prop(lang, x_));
-        return R.omit(LANGS, x_);
+        if(R.is(String, x)) {
+            return x;
+        } else {
+            if (R.isNil(R.prop(lang, x))) {
+                return x;
+            } else {
+                var x_ = x.toObject();
+                x_ = R.merge(x_, R.prop(lang, x_));
+                return R.omit(LANGS, x_);
+            }
+        }
     }
 }
 
@@ -15,8 +23,12 @@ module.exports = function (fn) {
         var projection = req.headers.lang ? req.headers.lang : DEFAULT_LANG;
 
         return fn(req, res, next).then(function (xs) {
+
             var result = R.is(Array, xs) ? xs.map(selectLang(projection)) : selectLang(projection)(xs);
             res.send(result);
+        }, function (error) {
+            console.error('API: ', error)
+            res.status(500).json({error: error});
         })
     } 
 }