Can I override/extend Meteor methods?

一曲冷凌霜 提交于 2020-01-03 11:28:35

问题


Is it possible to somehow override a method in Meteor? Or define another function such that both will get called?

In my regular code:

Meteor.methods(
   foo: (parameters) ->
      bar(parameters)
)

Somewhere else that gets loaded later (e.g. in tests):

Meteor.methods(
   # override
   foo: (parameters) ->
      differentBehavior(parameters)
      # I could call some super() here
)

So I would expect to either have both bar and differentBehavior executed or only differentBehavior and some possibility to call super().

Does this exist?


回答1:


To override a method, on server side you can do:

Meteor.methods({
   'method_name': function () {
       //old method definition
   }
});

Meteor.default_server.method_handlers['method_name'] = function (args) {
    //put your new code here
};

The Meteor.default_server.method_handlers['method_name'] has to be included after the method definition.

To override a method (also know as a stub), on client side you can do:

Meteor.connection._methodHandlers['method_name'] = function (args) {
    //put your new code here
};

The Meteor.connection._methodHandlers['method_name'] has to be included after the method definition.




回答2:


There are lots of ways you can do what you are intending to do.

For instance, the simplest way to overwrite any function would be to do something like:

Meteor.publish = function() { /* My custom function code */ };

We just over-wrote the Meteor.publish with our own instance.

However, if you want to wrapper a function like a proxy (I believe this is called a "proxy pattern":

var oldPublish = Meteor.publish();
Meteor.publish = function() {
  oldPublish(arguments);   // Call old JS with arguments passed in
}

ES6 also added a Proxy object that allows you to do some similar things (read about it here).

Also there are lots of AOP libraries (CujoJS, jQuery-AOP, and node-aop to name a few) for JavaScript that allow you to do before, after, around pointcuts on functions/objects. You could even roll-your-own if you wanted too.



来源:https://stackoverflow.com/questions/30105601/can-i-override-extend-meteor-methods

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!