繁体   English   中英

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

[英]How can I access server-side variables via Meteor.call()?

我认为在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);
}

不幸的是,我收到serverVarReferenceError 在我看来,在定义serverVar时使用Meteor.isServer作为条件破坏了这一概念。 但是如何使用Meteor.methods访问服务器端变量? 哪种方法可以解决我的问题? 非常感谢你!

更新:谢谢您的建议。 serverVar可以是服务器上定义的任何内容,而不是Meteor.isServer 因此,我认为仅将客户端上的serverVar定义为false不会解决我的问题。

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; 

请注意这一点。 如果您打算构建可扩展的应用程序,则可能会遇到问题。 如果您的变量是非用户变量,那么它看起来应该是。 如果将变量设置为true并具有其他服务器,则不会影响其他服务器。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM