我认为在Meteor中定义存储有关系统信息的服务器端类是明智的。所选用户应访问此信息。它没有存储在MongoDB中,所以我认为订阅和出版物不是一个选项,据我所知。
这是我的简化方法:
if(Meteor.isServer) {
serverVar = true; // could depend on server logic
}
Meteor.methods({
myMethod: function() {
if(serverVar) {
return "secret";
} else {
throw Error();
}
}
}
然后,在客户端:
Meteor.call("myMethod", function(err, res) {
console.log(res);
}
不幸的是,我得到的ReferenceError
serverVar
未定义。在我看来,在定义Meteor.isServer
时使用serverVar
作为条件打破了这个概念。但是如何使用Meteor.methods
访问服务器端变量?什么样的方法可以解决我的问题?非常感谢你!
更新:感谢您的建议。 serverVar
可以是服务器上定义的任何内容,而不是Meteor.isServer
。因此,我认为仅将客户端上的serverVar
定义为false将无法解决我的问题。
答案 0 :(得分:2)
var serverVar = false; // Pre-define serverVar
if(Meteor.isServer) {
serverVar = true; // could depend on server logic
}
Meteor.methods({
myMethod: function() {
if(serverVar) {
return "secret";
} else {
throw Error();
}
}
}
甚至
var serverVar = Meteor.isServer;
答案 1 :(得分:1)
小心这一点。如果您计划构建可扩展的应用程序,则可能是一个问题。如果您的变量是非用户变量,它看起来是。如果将变量设置为true&有其他服务器,它不会影响其他服务器。
另一个问题是如果服务器崩溃/重启状态重置
您可以将变量存储在集合中,最好这样做。这没有任何问题。