由于this question试验了Meteor,我得出以下结论:
在共享目录(客户端/服务器)中定义,这将引发引用错误:
if(Meteor.isServer) {
// could depend on server logic, this is not Meteor.isServer!
serverVar = true;
}
Meteor.methods({
myMethod: function() {
if(serverVar) {
return "secret";
} else {
throw Error();
}
}
}
然后,在客户端:
Meteor.call("myMethod", function(err, res) {
console.log(res);
}
导致:ReferenceError: serverVar
但是这个代码只在服务器端定义,运行完美:
// could depend on server logic, this is not Meteor.isServer!
serverVar = true;
Meteor.methods({
myMethod: function() {
if(serverVar) {
return "secret";
} else {
throw Error();
}
}
}
请注意,我只切换到服务器端目录而不是共享目录,并删除了if子句。
我认为两种方法都应该是等价的,忽略了代码可见的事实
在客户端上仅受Meteor.isServer
限制。
这使我得出结论,Meteor使用第一种方法尝试在客户端上没有明确限制服务器时运行代码。真的吗?!还有什么可以解释?
答案 0 :(得分:1)
答案 1 :(得分:0)
好的,我明白了。使用第一种方法,Meteor抛出ReferenceError
。这是由于客户端模拟了该功能。文档here中描述了此功能。
因此代码适用于这两种方法,但是当也在客户端上定义时,它会抛出ReferenceError
。将范围限制在服务器时,不会再发生这种情况。
答案 2 :(得分:0)
我想你可能只需要一个var serverVar;在最顶层(共享)