1

我正在从运行良好的 3rd 方 API 中检索用户列表。但是,当我单击查看用户的详细信息时,我想使用缓存的用户集合(minimongo)中的结果(如果可用),否则我会进行另一个 API 调用来检索数据。

但是,用户详细信息路线上有些奇怪。如果我记录 User.findOne(this.params._id) 的结果,我看到记录了用户对象,然后我看到记录了“未定义”。

这甚至可能吗,还是每次访问者查看用户详细信息页面时我都需要进行 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"
    }
});
4

0 回答 0