如何在Sailsjs服务中获得req和res?

时间:2014-04-25 05:37:02

标签: sails.js

我最近开始在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;
}

}

2 个答案:

答案 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;
    }
  }
}