我想扩展sailsjs以获得类似rails强参数的东西 即
req.params.limit([“email”,“password”,“password_confirmation”])
我已经将其创建为添加,但我希望它能自动附加到request.params
附加组件:
limit = function(limiters){
params = this.all();
self = Object();
limiters.forEach(function(limiter){
if(params[limiter]){
self[limiter] = params[limiter]
}
return self;
}
请求:
req.params.limit = limit;
req.params.limit(["email", "password"]);
我如何将此作为模块添加到框架中?
答案 0 :(得分:1)
我认为你可以创建一个policy
// policies/limit.js
limit = function(limiters){
params = this.all();
self = Object();
limiters.forEach(function(limiter){
if(params[limiter]){
self[limiter] = params[limiter]
}
return self;
}
module.exports = function limit (req, res, next) {
req.params.limit = limit;
req.params.limit(["email", "password"]);
next();
};
然后您可以在./config/policies.js文件中添加该策略。该示例适用于所有控制器/操作。在上面的链接中是有关如何将其添加到特定操作的文档。
// config/policies.js
module.exports.policies = {
'*': 'limit'
};
编辑:当然你可以拨打req.params.limit(...);在您的控制器中,如果您不希望它在策略中保持静态。政策通常只是表达中间件
答案 1 :(得分:0)
我在控制器操作上看到了这个用例,限制了可能的搜索等等。
另一方面:如果您只是希望模型不要占用创建请求中的未定义属性,则只需将schema
设置为true即可获得相应的模型:
// models/example.js
module.exports = {
schema: true,
attributes: {...}
}
全局设置:
// config/models.js
module.exports.models = {
schema: true,
...
}