利用自定义控制器中的蓝图/水线findWhere



我有一个模型,我使用它与蓝图REST

// api/models/Bear.js
module.exports = {
  attributes: {
    name: {
      type: 'string',
      required: true
    }
  }
};

我想根据与标准findWhere完全相同的标准对熊进行一些计算。的确,我希望能够请求

GET /bear/details

和我请求的完全一样

GET /bear

所以我可以找到熊的细节:

  • 复杂查询,如?where={}
  • 字段,如?name=
  • 还在body中发送json,如{name: ''}
  • 或者甚至可能使用?limit=

控制器看起来像这样:

// api/controllers/BearController.js
module.exports = {
  getDetails: function (req, res) {
    Bear.find().exec(function (err, bears){
      if (err) return res.serverError(err);
      var bearsDetails = _.map(bears, function(bear) {
        return {
          id: bear.id,
          nameLength: bear.name.length,
          reversedName: bear.split('').reverse().join('')
        };
      });
      return res.json(bearsDetails);
    });
  }
};

我有一个自定义路由,看起来像这样

// config/routes.js
module.exports.routes = {
  'get /bear/details': 'BearController.getDetails'
}

=> 如何在自定义控制器中自动过滤模型,就像在findWhere请求中一样,而无需重新发明轮子

显然是我自己在研究sails的find()源代码时发现的。可以使用actionUtilparseCriteria(req)。出于清洁的目的,我个人把它包装成一个服务。

约:

api/服务/ActionUtilService.js

module.exports = require('../../node_modules/sails/lib/hooks/blueprints/actionUtil');

api/控制器/BearController.js

module.exports = {
  getDetails: function (req, res) {
    let criteria = ActionUtilService.parseCriteria(req);
    Bear.find(criteria).exec(function (err, bears){
      if (err) return res.serverError(err);
      var bearsDetails = _.map(bears, function(bear) {
        return {
          id: bear.id,
          nameLength: bear.name.length,
          reversedName: bear.split('').reverse().join('')
        };
      });
      return res.json(bearsDetails);
    });
  }
};

为了简洁起见,我把它包装成

相关内容

  • 没有找到相关文章

最新更新