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 挂钩都是以这种方式工作的。
如果你想确保挂钩 firsthook
在 secondhook
之前加载它的所有路由,你可以将以下内容作为 firsthook
的 initialize
方法:
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
可以接受单个事件名称或要等待的数组。
我有一些策略正在尝试转换为可安装的挂钩。 特别是身份验证步骤,它为用户身份添加会话变量。我需要确保它首先触发,因为随后 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 挂钩都是以这种方式工作的。
如果你想确保挂钩 firsthook
在 secondhook
之前加载它的所有路由,你可以将以下内容作为 firsthook
的 initialize
方法:
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
可以接受单个事件名称或要等待的数组。