2016-10-13 62 views
0

我有一個模型,我用它與藍圖REST利用藍圖/水線findWhere裏面的自定義控制器

// api/models/Bear.js 

module.exports = { 
    attributes: { 
    name: { 
     type: 'string', 
     required: true 
    } 
    } 
}; 

我想執行一些計算基於完全相同的審覈規定爲標準findWhere熊。事實上,我希望能夠請求

GET /bear/details 

正是就像我要求

GET /bear 

所以,我可以找到熊細節:

  • 複雜的查詢像?where={}
  • ?name=
  • 但還發送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請求中自動準確地過濾模型,在自定義控制器中,無需重新發明輪子?

回答

0

顯然我想通了自己挖掘sails' find() source code。可以使用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); 
    }); 
    } 
}; 

清潔度我裹成