Sails.js 如何在Sailsjs服务中获取req和res?

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 = {

我最近开始使用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 = {};
    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变量。我最终使用模型验证数据,但我首先需要验证不直接映射到属性的字段/值的组合。