页面重新加载时,我定义的值不会保留。
if (Meteor.isClient) {
Session.setDefault('user_id', null);
Template.register.events({
'submit form': function(event){
var password = getHash(event.target.password.value);
var name = event.target.name.value;
console.log(Session.get('user_id')); //always show the default
var now = new Date();
password = getHash(password);
IDS.insert({name: name, online: false, password: password, last_activity: now,last_login: now, created_at: now},function(error,id){
Session.set('user_id',id);
//not persisting
});
event.target.password.value = '';
event.target.name.value = '';
}
});
}
我做错了什么?
答案 0 :(得分:2)
正如Marius Darila在评论中解释的那样,流星会话不会持续浏览浏览器刷新。它仅在客户端应用程序中保留。当您在浏览器上刷新页面时,它基本上会重新启动"客户端,将其Session重置为空状态。 (加上您在启动时默认设置的任何变量,例如user_id
设置为null
)
默认情况下,Meteor中的数据只能在mongodb数据库中的应用重新启动时保留。您可以找到许多社区包,为您提供其他数据持久性方法,例如浏览器localStorage的persistent session包,或服务器端文件存储的CollectionFS。
答案 1 :(得分:1)
手动刷新页面时,会话不会持续存在。之前所有来自pingo和BraveKenny的回答都是正确的。 但是当Meteor执行热代码重新加载时,它会保留会话数据,因为用户没有询问刷新,而是服务器要求刷新。这是在刷新时持久化Session的唯一用例,但它不应经常发生。
答案 2 :(得分:-1)
需要添加此行:
Tasks = new Mongo.Collection("users");
到服务器部分:
if (Meteor.isServer) {
// This code only runs on the server
Tasks = new Mongo.Collection("users");
}
这将保留数据。或者,您可以将其添加到js文件的if(Meteor.isClient)部分之上。
https://www.meteor.com/tutorials/blaze/collections
这是新的,但碰巧也在学习Meteor。让我知道这个是否奏效。谢谢!
答案 3 :(得分:-1)
Meteor.userId()
代替?它也是反应性的!
Btw会话意味着客户端本地存储,而不是在服务器端,每次浏览器重新加载时都是空的。