我正在寻找一种有效的方法来实现我的事件流程。到目前为止,这正是我要做的事情:
我的对象是Meteor.call(...function, (error, result))
的结果
我在客户端myObject = result
上声明了该对象。当用户单击按钮
现在,我如何将此变量放入我现在在Router.route(Iron路由器)中进行的另一个流星调用?截至目前,它尚未定义。
此对象中的值已在函数内的服务器上定义。我实际上是将此对象从服务器传递到客户端,然后再次返回服务器。 我可以将它存储在服务器上以用于其他功能吗?
我读到,在服务器上存储全局变量时,如果为其他用户设置了这些变量的值,就会搞乱其他用户。这是对的吗?
e.g。下一个调用,但myObject未定义
Router.route('/home/', {
name: 'home',
waitOn: function () {
},
action: function () {
// putting 'myObject' into call to pass onto the server
Meteor.call('toUseTheObjectOnServer', myObject, function (error, response) {
if (error) {
console.log(error)
} else {
console.log(response)
}
})
}
if (this.ready())
this.render('home');
else
this.render('Loading');
}
});
我要实现的事件流程:
(服务器)http post - 我在体内返回了2个字段(token,token_secret)。 callback将结果返回给客户端
(客户端)我使用其中一个字段'令牌'构造一个url并在我得到结果后立即将用户引导到此。用户登录外部应用程序,有效地授予我访问其数据的权限。
如果用户授予我访问权限,则会将用户定向到我提供给服务提供商的回调网址。服务提供者向该回调URL添加一个参数,该参数指示用户是否授予我访问权限。回调网址中的参数是authorize=1
...这意味着我已被授予。 authorize=0
...我没有被授予访问权限。
答案 0 :(得分:1)
为了在文件之间使用它(在模板上设置,在路由器中使用),您需要将其存储在某种全局状态中。在这个例子中,我将使用一个会话变量:
Template.myTemplate.events({
'click button': function() {
Meteor.call('methodToGetObject', function(err, response) {
Session.set('myGlobalObject', response);
});
}
});
Router.route('/home', {
action: function() {
var object = Session.get('myGlobalObject');
Meteor.call('toUseTheObjectOnServer', object, function(err, response) {
console.log(response);
});
}
});
你可以将值存储在服务器上的每个用户的内存中,但这有两个原因并不理想:
更强大的解决方案是将状态存储在数据库中,并为每个连接的客户端自动发布它。如果用户在重新连接后应自动接收对象,则此方法可能有意义。如果第一个解决方案不适合您,我们可以更多地探索这个想法。