在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 回答
如果在
Service
执行完毕后需要调用res.view
,可以从控制器中删除res.view
,并将其放入服务本身:两个选项
添加回调到您的服务
您可以为应用添加自定义响应处理程序 . 看看http://sailsjs.org/#/documentation/concepts/Custom-Responses
您可以使用res.ok()替换res.view(),然后使用您的服务修改api / responses / ok.js .
或者,如果您不想使用ok.js,您可以创建自己的响应