我有一个熊模型,我使用它与蓝图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()
源代码时发现的。可以使用actionUtil的parseCriteria(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);
});
}
};
为了简洁起见,我把它包装成