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

sails.js - How can I specify an order to the routes of installable hooks?

我有一些策略正在尝试转换为可安装的挂钩。 特别是身份验证步骤,它为用户身份添加会话变量。我需要确保它首先触发,因为随后 hooks/controllers 查看会话以确定用户是谁。

关于路线的文档 ( https://github.com/balderdashy/sails-docs/blob/master/concepts/extending-sails/Hooks/hookspec/routes.md ) 说我可以指定是否要 运行 在所有自定义路线之前或之后的路线,但我没有看到指定的方法一钩接一钩。

我尝试在初始化文档 (https://github.com/balderdashy/sails-docs/blob/master/concepts/extending-sails/Hooks/hookspec/initialize.md) 中指定的两个挂钩的初始化步骤中添加一个 "sails.on"。虽然它确实改变了初始化阶段的顺序,但它似乎对处理路由的顺序没有任何影响。

任何指点将不胜感激。

如您所述,目前无法重新排序挂钩,但这并不意味着您无法通过其他方式实现您的目标。 hooks 的 routes 特性非常方便,但是在这种情况下你需要使用事件绑定你的路由,然后让你的 hooks 相互依赖以确保路由以正确的顺序加载。许多核心 Sails 挂钩都是以这种方式工作的。

如果你想确保挂钩 firsthooksecondhook 之前加载它的所有路由,你可以将以下内容作为 firsthookinitialize 方法:

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...

        });

    }

}

请注意 sails.after 可以接受单个事件名称或要等待的数组。