如何获取当前正在执行的Meteor方法的名称?

如何获取当前正在执行的Meteor方法的名称?,meteor,Meteor,我可以从中获取当前正在执行的Meteor方法的名称吗 相同吗?这对于日志记录来说很方便 我用Meteor方法检查了这个。它是MethodInvocation的一个实例,似乎没有任何有用的方法名称 似乎将方法名称添加到MethodInvocation和调用者非常容易,但我不确定维护者是否会接受一个补丁,在每个MethodInvocation实例中添加一个name字段 交叉贴。这并不理想,但下面是如何使用monkey patchMeteor。获得此功能的方法,如stubailo建议的: var cu

我可以从中获取当前正在执行的Meteor方法的名称吗 相同吗?这对于日志记录来说很方便

我用Meteor方法检查了
这个
。它是
MethodInvocation
的一个实例,似乎没有任何有用的方法名称

似乎将方法名称添加到
MethodInvocation
和调用者非常容易,但我不确定维护者是否会接受一个补丁,在每个
MethodInvocation
实例中添加一个
name
字段


交叉贴。

这并不理想,但下面是如何使用monkey patch
Meteor。获得此功能的方法,如stubailo建议的:

var currentMethod=new Meteor.EnvironmentVariable();
功能日志(消息){
var method=currentMethod.get();
如果(方法){
console.log(方法+”:“+消息);
}否则{
控制台日志(消息);
}
}
var oldMeteorMethods=Meteor.methods;
Meteor.methods=函数(对象){
var方法={};
_.each(对象、函数(函数、名称){
方法[名称]=函数(){
var self=这个;
var args=u0.toArray(参数);
返回currentMethod.withValue(名称,函数(){
返回函数应用(self,args);
});
};
});
方法(方法);
}
流星法({
示例:函数(arg1、arg2){
日志(“你好”);
返回剂量表hingelse(arg1)+arg2;
}
});
函数doSomethingElse(x){
log(“doSomethingElse用“+x”调用);
返回x*2;
}
//Meteor.call(“示例”,5,6)日志:
//“示例:你好”
//“示例:使用5调用doSomethingElse”
如果您不喜欢猴子补丁:

defineMethods=函数(对象){
var方法={};
_.each(对象、函数(函数、名称){
方法[名称]=函数(){
var self=这个;
var args=u0.toArray(参数);
返回currentMethod.withValue(名称,函数(){
返回函数应用(self,args);
});
};
});
流星.方法(方法);
}
定义方法({
示例:函数(arg1、arg2){
日志(“你好”);
返回剂量表hingelse(arg1)+arg2;
}
});

我对@user337的答案做了一点修改。现在您可以在方法函数中使用
@name

将此添加到服务器代码(coffeescript):


只要我的两分钱,一个完全工作的猴子补丁版本(没有下划线)。 在方法函数内部,您现在可以使用此.currentMethodName

Meteor.methods = (object) => {
    let methods = {};
    let keys = Object.keys(object)
    keys.forEach(key => {
        methods[key] = function () {
            let self = this;
            let args = [...arguments];
            self.currentMethodName = key
            return object[key].apply(self, args);
        }
    })
    oldMeteorMethods(methods);
}

流星1.10.1很简单

你可以用

this.name
e、 g

产出:

I20210126-08:35:30.120(0)? methodname:pod.create

作为一种解决方法,您可以使用monkey patch
Meteor.methods
来实现这一点,它甚至可以是一个包。
new ValidatedMethod({
  name: "pod.create",
  validate: new SimpleSchema({
    stuff: {
      type: String,
    }
}).validator(),
  run(pData) {
    console.log("methodname:" + this.name);
  }
});
I20210126-08:35:30.120(0)? methodname:pod.create