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

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

问题描述:

在sails将页面渲染为html之前,我想调用一个单独的函数(例如Service函数)。敬请参阅我下面的控制器代码...在使用sails执行res.view()函数调用之前如何调用另一个服务(函数)JS

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

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

我想补充我的服务功能,API /服务/ 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)是:

  1. 查询到帆从MongoDB的
  2. 获取一些数据
  3. 解析req.flash消息中的意见传递显示。

任何人都有这个想法?

+0

可以显示在myFunction的() – Quince 2014-11-04 08:26:18

+0

喜木瓜的代码,我更新的代码感谢您的时间:) – Nina 2014-11-04 08:34:38

如果您需要致电res.viewService后完成执行,你可以从控制器删除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

谢谢......但这不是我正在寻找的方法......因为我已经创建了很多控制器动作,如果我实现这个,我需要在任何地方调用这个函数,这是很难管理的......我而是期待express.js。感谢您的时间... – Nina 2014-11-05 09:20:08

两个选项

为您的服务添加回调

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乱

+0

谢谢,但不是这个...有没有反正express.js的某处,这个文件将在res.view sails函数调用之前执行? – Nina 2014-11-05 09:21:16