Sails.js 如何在Sailsjs服务中获取req和res?
我最近开始使用sailsjs中的服务来减少控制器中的代码。以下是我如何在服务中调用函数的示例:Sails.js 如何在Sailsjs服务中获取req和res?,sails.js,Sails.js,我最近开始使用sailsjs中的服务来减少控制器中的代码。以下是我如何在服务中调用函数的示例: ValidationService.addError(req,res,'Password is too short.'); var errorCss = 'alert-danger'; var successCss = 'alert-success'; module.exports = { init : function(req,res){ req.session.flash = {
ValidationService.addError(req,res,'Password is too short.');
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;
}
}
请注意,我将req和res传递给我的服务。为什么现在还没有呢?我如何将它们添加到服务中,以便不必总是显式地传递它们
根据要求,以下是我的服务代码:
ValidationService.addError(req,res,'Password is too short.');
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;
}
}
其他重构正在进行中 我想你可以做一些全球化的东西,但那会使应用程序完全失控。因为用户现在可能正在共享会话。如果它不是完全爆炸的话 但是看看你的问题,我看到你正在使用一个服务来验证密码长度。您应该为此使用模型。看看 回应你的评论 验证可以是函数,甚至可以依赖于多个字段 见下文
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;
}
}
}
我相信你已经读过了,但是再看看。这基本上意味着您可以在服务中使用任何通用代码,而不一定是处理请求和响应的代码。例如,您的应用程序可能有一部分是从命令行运行的:在这种情况下不会有请求或响应,但您仍然希望能够使用您的服务
总之,通过传递req/res,您已经做得很好了。(只是不要做得太过分:您应该只为您在多个地方使用的代码创建服务,对每个控制器都这样做是没有意义的)。查看更多代码,了解您将这些代码传递给服务的“原因”,这将很有帮助。至少是没有道理为什么你需要
res
。这应该在控制器方法的底部调用。我不需要res,但我需要req,因为我在服务(req.session.x)中设置req变量。我最终使用模型验证数据,但我首先需要验证不直接映射到属性的字段/值的组合。