Meteor:如何编写包含用户名的发布函数

时间:2015-12-30 17:51:03

标签: mongodb meteor publish publish-subscribe

注意:整个代码可以在这里找到:

https://github.com/Julian-Th/crowducate-platform/

目前,数组中的所有项目都显示在一个列表中,而不是单独的列表标记:

我有一个pub功能,完美运行:

Meteor.publish('editableCourses', function () {
    return Courses.find({"canEditCourse": { $in: [ this.userId ] } });
});

但是,我想改用用户名。所以我尝试了以下但没有结果:

Meteor.publish('editableCourses', function () {
    return Courses.find({"canEditCourse": { $in: [ this.user.username ] } });
});

我的JSON:

{
    "_id" : "P5JFAfrxaNpApvZWW",
    "createdAt" : ISODate("2015-12-30T17:38:47.506Z"),
    "services" : {
        "password" : {
            "bcrypt" : "$2a$10$lLskLjO6W2eoA06Ws5sC/upq6Stbh1eTbgTAN3wa39RCD8x7GU1ZS"
        },
        "resume" : {
            "loginTokens" : [ 
                {
                    "when" : ISODate("2015-12-30T17:38:47.605Z"),
                    "hashedToken" : "g2rye+mwrNNsjL3mHtxT+sYXgj3OGoEZsGRMyVEI47I="
                }
            ]
        }
    },
    "username" : "User1",
    "emails" : [ 
        {
            "address" : "user1@test.com",
            "verified" : false
        }
    ]
}

感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

Courses集合的项目是您要发布的内容。

因此,当您使用Courses.find({"canEditCourse": { $in: [ this.userId ] } });进行查询时,canEditCourse字段就是您要与userId匹配的内容(字面意思是查找canEditCourse数组包含的所有课程userId。)

我不知道你为什么要在这里使用用户名。这对你有什么影响?

如果您确实要执行此操作,则需要将canEditCourse字段设为username而不是userId的数组。 这意味着您需要更改创建或编辑课程的逻辑以及填写此字段的位置。

不确定这是值得的。如果您想要的是按用户名查找课程,则按用户名查找用户,获取他/她的userId并按userId查找课程。

Meteor.publish('editableCourses', function (username) {
    var myUser = Meteor.users.findOne({'username': username});
    return Courses.find({"canEditCourse": { $in: [ myUser._id ] } });
});