有人知道将上下文传递给sails控制器操作的正确方法吗? 我的理由是这样的:
--- AbstractPageController.js ---
module.exports = {
_getPageData: function(req, res) {
return {
data: {
title: this._getTitle(req, res), // if do nothing "this" is global object
menu: this._getMenu(req, res)
}
};
},
_getTitle: function(req, res) { return 'Cool Page'; },
_getMenu: function(req, res) { return [{ href: '/logout' }]; }
};
--- ConcretePageController.js ---
var _ = require('lodash');
_super = require('./AbstractPageController.js');
module.exports = _.merge({}, _super, {
'main': function(req, res) {
res.view('pageTemplate', this._getPageData(req, res));
},
_getTitle: function(req, res) {
return 'Absolutely - ' + _super._getTitle(req, res);
},
_getMenu: function(req, res) {
return [{ href: '/main/'}].concat(_super._getMenu(req, res));
}
});
这就是我需要背景的原因。
对于这个特殊情况,我找到了这个解决方案:
--- routes.js ---
var concreteController = require('../api/controllers/ConcretePageController.js');
module.exports.routes = {
'/concrete_page': function(req, res) { concreteController.main(req, res); }
}
但它看起来有点难看,而且风帆钩子(例如政策)停止工作。
我正在考虑另一种方式。其重点是将所有逻辑移动到服务并使用简单的继承。但这对我来说也很奇怪
有关更好地了解我所写案例的任何想法吗?
P.S。我上面写的所有代码只是一个例子。
答案 0 :(得分:1)
我想你想预先设置一些数据发送到视图模板,对吧?
是的,你可以使用一个前挂钩(如中间件)或帆警察
我在we-plugin https://github.com/wejs/we-plugin
中使用来自npm模块的preload sails功能的sails hook检查此挂钩是否在控制器之后的所有请求中加载用户区域设置: 链接:https://github.com/wejs/we-example/blob/master/api/hooks/we-locale/index.js#L15
答案 1 :(得分:1)
您应该直接引用控制器
sails.controllers.yourControllerName.getTitle()