如何通过Meteor.call()访问服务器端变量?

时间:2013-12-04 22:42:02

标签: javascript meteor

我认为在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将无法解决我的问题。

2 个答案:

答案 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&有其他服务器,它不会影响其他服务器。

另一个问题是如果服务器崩溃/重启状态重置

您可以将变量存储在集合中,最好这样做。这没有任何问题。