我可以从内部获取当前正在执行的Meteor方法的名称 相同)?这对于记录来说非常方便。
我在Meteor方法中检查了this
。它是MethodInvocation
的一个实例,似乎没有任何有用的方法来确定方法名称。
似乎很容易将方法名称添加到MethodInvocation
和调用者,但我不确定维护者是否会接受为每个{{name
字段添加MethodInvocation
字段的补丁1}}实例。
已转发here。
答案 0 :(得分:3)
这不是理想的,但是这里有你如何使用Meteor.methods
来获得这个功能,就像stubailo建议的那样:
var currentMethod = new Meteor.EnvironmentVariable();
function log(message) {
var method = currentMethod.get();
if (method) {
console.log(method + ": " + message);
} else {
console.log(message);
}
}
var oldMeteorMethods = Meteor.methods;
Meteor.methods = function (object) {
var methods = {};
_.each(object, function (func, name) {
methods[name] = function () {
var self = this;
var args = _.toArray(arguments);
return currentMethod.withValue(name, function() {
return func.apply(self, args);
});
};
});
oldMeteorMethods(methods);
}
Meteor.methods({
example: function (arg1, arg2) {
log("hello");
return doSomethingElse(arg1) + arg2;
}
});
function doSomethingElse(x) {
log("doSomethingElse called with " + x);
return x * 2;
}
// Meteor.call("example", 5, 6) logs:
// "example: hello"
// "example: doSomethingElse called with 5"
如果你不喜欢猴子补丁:
defineMethods = function (object) {
var methods = {};
_.each(object, function (func, name) {
methods[name] = function () {
var self = this;
var args = _.toArray(arguments);
return currentMethod.withValue(name, function() {
return func.apply(self, args);
});
};
});
Meteor.methods(methods);
}
defineMethods({
example: function (arg1, arg2) {
log("hello");
return doSomethingElse(arg1) + arg2;
}
});
答案 1 :(得分:1)
使用 Meteor 1.10.1 很容易
你可以使用
this.name
例如
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
答案 2 :(得分:0)
我已经重新修改了@ user337的答案。现在你可以在方法函数中使用@name
将其添加到服务器代码(coffeescript):
currentMethod = new Meteor.EnvironmentVariable()
oldMeteorMethods = Meteor.methods
Meteor.methods = (object) ->
methods = {}
_.each object, (func, name) ->
methods[name] = ->
args = _.toArray(arguments)
this.name = name
currentMethod.withValue name, =>
func.apply this, args
oldMeteorMethods methods
答案 3 :(得分:0)
我的两美分,是一个完整的猴子补丁版本(没有下划线)。 在方法函数内部,您可以立即使用this.currentMethodName。
'D'