首页 文章

如何在使用sails JS执行res.view()函数调用之前调用另一个服务(函数)

提问于
浏览
2

在sails将页面呈现为html之前,我想调用一个单独的函数(例如Service函数) . 请在下面参考我的控制器代码......

var MYController = {
   index: function(req, res, next) {

      req.flash("error", "Testing hello world"); 
      MyCustomServices.myFunction( req, res );
      res.view();
   }
}

只是添加我的服务功能,api / services / MyCustomServices.js

exports.myFunction = function( req, res ){
   Test.findOne({ code : "CODE" }, function(err, resp) {
        if ( resp ) {
            res.locals.TEST = resp;
        }
   });

   var msg = req.flash('error');
   res.locals.ERROR = msg.length>0 ? msg : "" ;

};

在这种情况下,在执行res.view之前,当我调用MyCustomServices.myFunction(req,res)时,还有另一个进程要运行;

问题是,每次我有res.view()函数调用时,我都需要在我所有控制器的动作中添加这一行 .

我试图添加这个MyCustomServices.myFunction(req,res);在express.js中,但它似乎没有按预期工作 . 但我想,它应该是明确的,只是我不知道我需要添加什么代码 .

我的MyCustomServices.myFunction(req,res)里面有什么:

  • 查询sails以从MongoDB获取一些数据

  • 解析要在视图中传递的req.flash消息以进行显示 .

有人对此有所了解吗?

2 回答

  • 0

    如果在 Service 执行完毕后需要调用 res.view ,可以从控制器中删除 res.view ,并将其放入服务本身:

    var MYController = {
      index: function(req, res, next) {
        req.flash("error", "Testing hello world"); 
        MyCustomServices.myFunction( req, res );
        //res.view();
      }
    }
    

    exports.myFunction = function( req, res ){
       Test.findOne({ code : "CODE" }, function(err, resp) {
            if ( resp ) {
                res.locals.TEST = resp;
                res.view(); //TADA
            }else {
                /* Handle Error */
            }
       });
    
       var msg = req.flash('error');
       res.locals.ERROR = msg.length>0 ? msg : "" ;
    
    };
    
  • 0

    两个选项

    添加回调到您的服务

    var MYController = {
       index: function(req, res, next) {
    
          req.flash("error", "Testing hello world"); 
          MyCustomServices.myFunction( req, res, function(){
              return  res.view();
          } );
    
       }
    }
    
    exports.myFunction = function( req, res, cb ){
       Test.findOne({ code : "CODE" }, function(err, resp) {
            if ( resp ) {
                res.locals.TEST = resp;
                return cb()
            }
       });
    
    };
    
    • 或(根据您的意见) -

    您可以为应用添加自定义响应处理程序 . 看看http://sailsjs.org/#/documentation/concepts/Custom-Responses

    您可以使用res.ok()替换res.view(),然后使用您的服务修改api / responses / ok.js .

    或者,如果您不想使用ok.js,您可以创建自己的响应

相关问题