gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:47:24 27 4
gpt4 key购买 nike

我可以获取当前正在执行的 Meteor 方法的名称吗(从内部
相同的)?这对于记录很方便。

我检查了 this在 Meteor 方法中。它是 MethodInvocation 的一个实例,并且似乎没有任何可用于确定方法名称的信息。

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

交叉发布 here .

最佳答案

这并不理想,但您可以通过以下方式进行猴子补丁 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;
}
});

关于meteor - 如何获取当前正在执行的 Meteor 方法的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26518711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com