Постоянные сеансы в метеоре
Итак, один из самых запутанных аспектов, которые я наблюдал с Meteor, это то, что сессии очищаются при каждом обновлении. Так как это не постоянный магазин, куда я мог бы поместить такие вещи, как идентификатор пользователя или где люди находятся в машине состояний моего приложения?
Каковы шаблоны для этих сценариев?
2 ответа
На самом деле, вы можете создать "подкласс" Session, который хранит значение в локальном хранилище Amplify при вызове set(). Вы автоматически унаследуете все реактивные свойства Session. Вот код, он работал для меня:
SessionAmplify = _.extend({}, Session, {
keys: _.object(_.map(amplify.store(), function(value, key) {
return [key, JSON.stringify(value)]
})),
set: function (key, value) {
Session.set.apply(this, arguments);
amplify.store(key, value);
},
});
Просто замените все ваши вызовы Session.set/get на SessionAmplify.set/get. Когда вызывается set(), вызывается родительский метод Session, а также ampify.store(). Когда "подкласс" создается впервые, он загружает все, что находится в хранилище усилителя, внутри своих ключей, чтобы их можно было сразу получить с помощью get().
Вы можете протестировать рабочий вариант примера Leaderboard здесь: https://github.com/sebastienbarre/meteor-leaderboard
Ну, для начала я бы использовал встроенные в Auth метеоры для хранения userID. Я думаю, что они используют локальное хранилище по умолчанию, но AFAIK нет простого способа подключиться к этому.
Тем не менее, я бы подумал, что если вы хотите, чтобы материал выживал после обновлений, вы должны либо сохранить его в монго, либо использовать URL-адрес, чтобы указать, где они находятся в "конечном автомате". Вы можете использовать загрузочный маршрутизатор (например) для использования pushState
изменить URL.