Meteor:如何编写包含用户名的发布函数
Meteor: How to write a publish-function containing the username
注意:完整代码可以在这里找到:
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" : "a$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
}
]
}
感谢您的帮助,感激不尽。
Courses
合集中的项目是您发布的内容。
因此,当您使用 Courses.find({"canEditCourse": { $in: [ this.userId ] } });
查询时,canEditCourse
字段就是您要与 userId
匹配的内容(字面意思是查找 canEditCourse
所在的所有课程数组包含用户 ID。)
不过我不明白您为什么要在这里使用用户名。这对你有什么好处?
如果您确实想这样做,那么您需要让 canEditCourse
字段成为 username
而不是 userId
的数组。
这意味着您需要更改创建或编辑课程的逻辑以及填写此字段的逻辑。
不确定是否值得麻烦。如果您想要按用户名查找课程,则按用户名查找用户,获取 his/her 用户 ID 并按用户 ID 查找课程。
Meteor.publish('editableCourses', function (username) {
var myUser = Meteor.users.findOne({'username': username});
return Courses.find({"canEditCourse": { $in: [ myUser._id ] } });
});
注意:完整代码可以在这里找到:
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" : "a$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
}
]
}
感谢您的帮助,感激不尽。
Courses
合集中的项目是您发布的内容。
因此,当您使用 Courses.find({"canEditCourse": { $in: [ this.userId ] } });
查询时,canEditCourse
字段就是您要与 userId
匹配的内容(字面意思是查找 canEditCourse
所在的所有课程数组包含用户 ID。)
不过我不明白您为什么要在这里使用用户名。这对你有什么好处?
如果您确实想这样做,那么您需要让 canEditCourse
字段成为 username
而不是 userId
的数组。
这意味着您需要更改创建或编辑课程的逻辑以及填写此字段的逻辑。
不确定是否值得麻烦。如果您想要按用户名查找课程,则按用户名查找用户,获取 his/her 用户 ID 并按用户 ID 查找课程。
Meteor.publish('editableCourses', function (username) {
var myUser = Meteor.users.findOne({'username': username});
return Courses.find({"canEditCourse": { $in: [ myUser._id ] } });
});