使用mongo调用铁路由器两次

时间:2015-12-10 20:01:38

标签: meteor

如果我执行一些查找,我会调用两次路由器。如果我删除了find语句,路由器只调用一次(这是我在其他情况下的预期)。

路由器配置:

Router.onBeforeAction(function() {
    console.log("ROUTE!");
    if (!Meteor.userId()) {
        Router.go("login");
    } else {
        this.next();
    }
}, {
    except: ['login', 'signup']
});

我的路线:

Router.route("/", function() {
    this.subscribe("games");

    var lastDay = Games.findOne({}, {sort: {createdAt: -1}});
    console.log(lastDay);

    this.render("stats", {
        data: function() {
            return { 
                games: Games.find()
            };
        }
    });
}, { name: "stats" });

使用lastDay查找,路由被调用两次。首先未定义结果,第二次我得到正确的对象。 删除lastDay语句,路由器工作正常。

更新:尝试将findOne放在帮助器中,控制台.log,它也是两次调用!第一次未定义,第二次是对象。

2 个答案:

答案 0 :(得分:0)

尝试返回结果而不是存储在变量

Router.route("/", function() {
    this.subscribe("games");


    this.render("stats", {
        data: function() {
            return { 
                games: Games.find({$gt:Games.findOne({}, {sort: {createdAt: -1}}).createdAt})
            };
        }
    });
}, { name: "stats" });

答案 1 :(得分:0)

修复了使用waitOn进行订阅的问题。

Router.route("/", {
    name: "stats",
    waitOn: function() {
        return Meteor.subscribe("games");
    }, 
    action: function() {
        var lastDay = Games.findOne({}, {sort: {createdAt: -1}});

        this.render("stats", {
            data: function() {
                return {
                    games: Games.find()   
                }
            }
        });
    }
});