假设:Meteor.call()首先尝试在客户端环境中运行,这是真的吗
Assumption: Is it true that Meteor.call() tries to run in the client environment first?
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子句。
我认为这两种方法应该是等效的,忽略了代码是可见的这一事实当仅受CCD_ 2限制时。
这让我得出这样的结论:Meteor使用第一种方法,当客户端不明确限制在服务器上时,它会尝试在客户端上运行代码。这是真的吗?!另一种解释是什么?
不要使用Meteor.isServer()
Meteor.isServer可以用来限制代码运行的位置,但它不能阻止代码发送到客户端。
检查这个答案来构建你的流星应用
好的,我明白了。使用第一种方法,Meteor抛出一个ReferenceError
。这是由于该函数的客户端模拟。此处的文档中介绍了此功能。
因此,代码可以同时使用这两种方法,但当在客户端上定义时,它会抛出ReferenceError
。当将作用域限制到服务器时,这种情况将不再发生。
我认为您可能只需要一个var serverVar;在最顶部(共享)
相关文章:
- 客户端服务器REST API captcha实现
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何使用Socket.io将命令从客户端发送到服务器
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 如何将我的javascript库公开给其他客户端使用
- 是否可以使用JavaScript/AAJAX在客户端创建一个文件
- 如何使用Javascript客户端对象模型检索Sharepoint 2010列表项权限
- 返回/从Twit's客户端.get
- 将客户端特定的日期格式返回到服务器MVC4
- MobileFirst:在客户端运行计时器作业-最佳选项
- 标签客户端的设置值
- 我的客户端选项是什么
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 如何将 Node.js 环境变量注入客户端 JavaScript
- 假设:Meteor.call()首先尝试在客户端环境中运行,这是真的吗
- WebPack:访问客户端代码中的节点环境变量
- 在客户端requireJS环境中使用material ui
- 记录多客户端环境下API的使用情况