我最近开始在sailsjs中使用服务来减少控制器中的代码。 Heres是我在服务中调用函数的一个例子:
ValidationService.addError(req,res,'Password is too short.');
注意我将req和res传递给我的服务。为什么这些不可用?如何将它们添加到服务中,以便我不必总是明确地传递它们?
根据要求,这是我服务中的代码:
var errorCss = 'alert-danger';
var successCss = 'alert-success';
module.exports = {
init : function(req,res){
req.session.flash = {};
req.session.flash.alert = {};
req.session.flash.alert.data = [];
req.session.flash.alert.result = 'pass';
},
addError : function(req,res,error){
req.session.flash.alert.data.push(error);
req.session.flash.alert.css = errorCss;
req.session.flash.alert.result = 'fail';
},
addSuccess: function(req,res,success){
req.session.flash.alert.data.push(success);
req.session.flash.alert.css = successCss;
},
isValid : function(req,res){
if ((req.session.flash.alert.result == 'pass')){
return true;
}
return false;
},
clear : function(req,res){
delete req.session.flash;
}
}
答案 0 :(得分:1)
我确定您已经阅读过此内容,但请再次查看the definition of the Sails services。这基本上意味着您可以在服务中包含任何公共代码,而不一定是处理请求和响应的内容。例如,您可以从命令行运行应用程序的一部分:在这种情况下不会有请求或响应,但您仍然希望能够使用您的服务。
最重要的是,你通过传递req / res已经做到了。 (只是不要过头了:你应该只为你在多个地方使用的代码创建服务,为每个控制器做这件事都没有意义。)
答案 1 :(得分:0)
其他重构是有序的......
我想你可以制作一些全球性的东西,但这会让应用程序变得完全失控。因为用户现在可能正在共享会话。如果它没有完全爆炸。
但是看看你的问题,我发现你正在使用服务来验证密码长度。你应该使用这个模型。看看Validations
回应你的评论......
验证可以是函数,甚至可以依赖于多个字段!
见下文......
attributes: {
website: {
type: 'string',
contains: function(cb) {
setTimeout(function() {
cb('http://');
}, 1);
}
}
startDate: {
type: 'date',
before: function() {
return this.endDate;
}
},
endDate: {
type: 'date',
after: function() {
return this.startDate;
}
}
}