Orm 在Sails控制器中执行操作之前

Orm 在Sails控制器中执行操作之前,orm,sails.js,waterline,Orm,Sails.js,Waterline,是否有办法在Sails控制器中定义的每个和所有操作之前执行操作/功能?与模型中的beforeCreate挂钩类似 例如,在我的DataController中,我有以下操作: module.exports={ 模拟数据:功能(req、res){ var标准={}; //收集所有参数 criteria=\合并({},req.params.all(),req.body); //…更多符合条件的登录。。。 }, getDataForHost:函数(req、res){ var标准={}; //收集所有参数

是否有办法在Sails控制器中定义的每个和所有操作之前执行操作/功能?与模型中的
beforeCreate
挂钩类似

例如,在我的DataController中,我有以下操作:

module.exports={
模拟数据:功能(req、res){
var标准={};
//收集所有参数
criteria=\合并({},req.params.all(),req.body);
//…更多符合条件的登录。。。
},
getDataForHost:函数(req、res){
var标准={};
//收集所有参数
criteria=\合并({},req.params.all(),req.body);
//…更多符合条件的登录。。。
}
};
我是否可以执行以下操作:

module.exports={
操作前:功能(请求、恢复、下一步){
var标准={};
//收集所有参数
criteria=\合并({},req.params.all(),req.body);
//将标准存储在某个地方以供以后使用
//或者把它们传给下一个电话
next();
},
模拟数据:功能(req、res){
//…更多符合条件的登录。。。
},
getDataForHost:函数(req、res){
//…更多符合条件的登录。。。
}
};

对定义的任何操作的任何调用都将首先通过beforeAction?是的,您可以将策略用作beforeAction

文档显示它用于身份验证,但基本上可以用于您的目的。你只是把你的行动放在政策上


您可以在此处使用策略

例如,将自定义策略创建为
api/policies/collectParams.js

module.exports=功能(req、res、next){
//你的密码在这里
};
然后,您可以在
config/policies.js
中指定此策略是适用于所有控制器/操作,还是仅适用于特定的控制器/操作:

module.exports.policies={
//所有控制器和操作的默认策略
“*”:“collectParams”,
//特定控制器的所有操作的策略
“数据控制器”:{
“*”:“collectParams”
},
//特定控制器的特定操作的策略
“另一个控制器”:{
someAction:'collectParams'
}
};
有时您可能需要知道,当前控制器是什么(从您的策略代码)。您可以在
api/policies/collectParams.js
文件中轻松获得它:

console.log(req.options.model);//型号名称-如果您使用的是蓝图
console.log(请求选项控制器);//控制器名称
console.log(requ.options.action);//动作名称

改用策略,它会使您的代码看起来更清晰,感谢链接。如@Leestex-answer中所述,这看起来是解决方案。太好了!谢谢还有一个补充。可以按定义的顺序链接策略。根据文档,您可以添加一个数组,而不是添加特定的策略,例如添加到编辑方法
edit:['isAdmin','isLoggedIn']
如果明确列出某个操作,则其策略列表将覆盖默认列表。