我有一些政策可以尝试转换为可安装的挂钩。 一个特别是认证步骤,其为用户添加会话变量。我需要确保它首先触发,因为后续的钩子/控制器会查看会话以确定用户是谁。
路由上的文档(https://github.com/balderdashy/sails-docs/blob/master/concepts/extending-sails/Hooks/hookspec/routes.md)说我可以指定是否要在所有自定义路由之前或之后运行路由,但是我没有看到在另一个之前指定一个钩子的方法钩。
我尝试添加" sails.on"在初始化文档(https://github.com/balderdashy/sails-docs/blob/master/concepts/extending-sails/Hooks/hookspec/initialize.md)中指定的两个钩子的初始化步骤中。虽然它确实改变了初始化阶段的顺序,但它似乎对处理路线的顺序没有任何影响。
任何指针都会非常感激。
答案 0 :(得分:4)
正如您所指出的那样,目前无法重新订购挂钩,但这并不意味着您无法以其他方式实现目标。挂钩的routes
功能非常方便,但在这种情况下,您需要使用事件绑定路由,然后使挂钩相互依赖,以确保路由以正确的顺序加载。许多核心Sails钩子都以这种方式工作。
如果要确保挂钩firsthook
在secondhook
之前加载所有路由,则应将以下内容作为initialize
的{{1}}方法:< / p>
firsthook
然后在initialize: function(cb) {
sails.on('router:before', function () {
sails.router.bind(routePath1, routeFn1);
sails.router.bind(routePath2, routeFn2);
sails.router.bind(routePath3, routeFn3);
etc...
});
}
中执行相同操作,但包含在secondhook
块中:
sails.after
请注意initialize: function(cb) {
sails.after('hook:firsthook:loaded', function() {
sails.on('router:before', function () {
sails.router.bind(routePath1, routeFn1);
sails.router.bind(routePath2, routeFn2);
sails.router.bind(routePath3, routeFn3);
etc...
});
}
}
可以接受单个事件名称或要等待的数组。