利用自定义控制器中的蓝图/水线 findWhere
Take advantage of blueprints / waterline findWhere inside custom controller
我有一个 bear 模型,我将它与 blueprint REST.
一起使用
// api/models/Bear.js
module.exports = {
attributes: {
name: {
type: 'string',
required: true
}
}
};
我想根据与标准 findWhere
完全相同的标准对熊进行一些计算。事实上,我希望能够请求
GET /bear/details
完全符合我的要求
GET /bear
所以我可以通过 :
找到熊的详细信息
- 像
?where={}
这样的复杂查询
- 字段如
?name=
- 但也像
{name: ''}
一样在正文中发送 json
- 或者甚至可以使用
?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()
source code. One can use actionUtil 的 parseCriteria(req)
时发现的。为了清洁目的,我个人将其包装成服务。
大致:
api/services/ActionUtilService.js
module.exports = require('../../node_modules/sails/lib/hooks/blueprints/actionUtil');
api/controllers/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);
});
}
};
为了干净起见,我把它包进了
我有一个 bear 模型,我将它与 blueprint REST.
一起使用// api/models/Bear.js
module.exports = {
attributes: {
name: {
type: 'string',
required: true
}
}
};
我想根据与标准 findWhere
完全相同的标准对熊进行一些计算。事实上,我希望能够请求
GET /bear/details
完全符合我的要求
GET /bear
所以我可以通过 :
找到熊的详细信息- 像
?where={}
这样的复杂查询
- 字段如
?name=
- 但也像
{name: ''}
一样在正文中发送 json
- 或者甚至可以使用
?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()
source code. One can use actionUtil 的 parseCriteria(req)
时发现的。为了清洁目的,我个人将其包装成服务。
大致:
api/services/ActionUtilService.js
module.exports = require('../../node_modules/sails/lib/hooks/blueprints/actionUtil');
api/controllers/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);
});
}
};
为了干净起见,我把它包进了