Meteor 包 - Iron:router - 如何防止我的包路由执行使用它的应用程序的挂钩?

Meteor Package - Iron:router - How to prevent my package routes to execute the hooks of the apps that use it?

我正在使用 iron:router 创建一个流星包,效果很好。 这个包的路由逻辑非常具体

但是一旦我将此包添加到 Meteor 应用程序 中,该应用程序也使用 iron:router,Meteor 应用程序定义的挂钩(onBeforeAction、onAfterAction、. ..) 被包创建的路由调用。 我想阻止我的包路由执行应用程序的挂钩。

是否有一段简单的代码可以用来将我的包的路由与 "external" 挂钩隔离开来?也许我可以创建一个特定的 RouteController?

我最后的选择是从头开始实现路由器...

谢谢!

是的,您需要创建隔离控制器:

var MyPackageController = RouteController.extend({
  onBeforeAction: function () { ... },
  onAfterAction: function () { ... }
  /* other options */
});

Router.map(function () {
   this.route('packageRoute', {
      controller: MyPackageController
      /* other options */
   });
});

解决我的问题的代码如下:

let MyRouter = new Iron.Router;
MyRouter.onBeforeAction(Iron.Router.bodyParser.json());
MyRouter.onBeforeAction(Iron.Router.bodyParser.urlencoded({extended: false}));

解决方案是声明一个新的隔离路由器。路由器声明下的 2 行可以检索 POST 请求的数据。