Метеор: получить кэшированные результаты минимонго из API
Я получаю список пользователей из стороннего API, который работает довольно хорошо. Однако, когда я нажимаю, чтобы просмотреть сведения о пользователе, я хотел бы использовать результат из кэшированной коллекции (minimongo) пользователей, если таковой имеется, в противном случае я бы сделал еще один вызов API для извлечения данных.
Тем не менее, есть что-то немного странное в маршруте с подробностями пользователя. Если я регистрирую результаты User.findOne(this.params._id), я вижу зарегистрированный объект User, затем я вижу "undefined".
Это вообще возможно, или мне нужно делать вызов API каждый раз, когда посетитель просматривает страницу с информацией о пользователе?
Маршруты:
Router.route('/users', {
name: 'usersList',
waitOn: function() {
Meteor.subscribe('usersGet');
}
});
Router.route('/users/:_id', {
name: 'userPage',
data: function() {
var user = Users.findOne(this.params._id);
// Logic to determine if user is found or a call to the API is required
// Logging the results to the console initially displays the user object, but then displays undefined
return user;
}
});
Коллекция:
// lib/collections/users.js
Users = new Mongo.Collection('users');
// server/users.js
Meteor.publish('usersGet', function () {
var self = this;
try {
var response = HTTP.call("GET", "http://api.com/users", {
headers: {
// headers...
}
});
_.each(response.data.users, function (user) {
self.added('users', user.id, user);
});
self.ready();
} catch(e) {
// handle errors
}
});
Страница пользователя: (Я также пытался создать помощника, но получил те же результаты)
Template.userPage.helpers({
user: function() {
var user = Users.findOne(this._id);
console.log(user); // I initially see the user object the server retrieved earlier logged 3 times, but then it logs "undefined"
}
});