sails.js - 如何指定可安装挂钩路由的顺序?

时间:2015-03-10 17:47:58

标签: sails.js

我有一些政策可以尝试转换为可安装的挂钩。 一个特别是认证步骤,其为用户添加会话变量。我需要确保它首先触发,因为后续的钩子/控制器会查看会话以确定用户是谁。

路由上的文档(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)中指定的两个钩子的初始化步骤中。虽然它确实改变了初始化阶段的顺序,但它似乎对处理路线的顺序没有任何影响。

任何指针都会非常感激。

1 个答案:

答案 0 :(得分:4)

正如您所指出的那样,目前无法重新订购挂钩,但这并不意味着您无法以其他方式实现目标。挂钩的routes功能非常方便,但在这种情况下,您需要使用事件绑定路由,然后使挂钩相互依赖,以确保路由以正确的顺序加载。许多核心Sails钩子都以这种方式工作。

如果要确保挂钩firsthooksecondhook之前加载所有路由,则应将以下内容作为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... }); } } 可以接受单个事件名称或要等待的数组。