【问题标题】:How to call another service (function) before executing the res.view() function call using sails JS如何在使用sails JS执行res.view()函数调用之前调用另一个服务(函数)
【发布时间】:2014-12-31 01:30:27
【问题描述】:

我想在sails 将页面渲染为html 之前调用一个单独的函数(例如服务函数)。请参考下面我的控制器代码...

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) 里面的内容是:

  1. sails 从 MongoDB 获取一些数据的查询
  2. 解析要在视图中传递的 req.flash 消息以进行显示。

有人知道这个吗?

【问题讨论】:

  • 能否在myFunction()中显示代码
  • 嗨 Quince,我更新了代码,感谢您的时间 :)

标签: javascript mongodb express sails.js


【解决方案1】:

如果您需要在您的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 : "" ;

};

【讨论】:

  • 谢谢...但这不是我正在寻找的方法...因为我已经创建了很多控制器动作,如果我实现这个,我需要在任何地方调用这个函数,这很难管理......我期待的是 express.js。感谢您的宝贵时间...
【解决方案2】:

两个选项

为您的服务添加回调

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()
        }
   });

};

-- 或(根据您的 cmets)--

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

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

如果您不想与 ok.js 混淆,也可以创建自己的响应

【讨论】:

  • 谢谢,但不是这个... express.js 中是否有某个地方,该文件将在调用 res.view 帆函数之前执行?
猜你喜欢
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多