Meteor 用户配置文件值作为集合查找查询中的值
此代码有一个集合菜单项,需要根据登录用户配置文件中的值进行筛选, db.users.find({});出局是 “配置文件”:{“菜单组”:“a”} 但我得到了一个错误: Meteor.userId只能在方法调用中调用。在发布函数中使用this.userId 从meteor服务器终端。问题行标记在下面代码的末尾。为什么会出现错误?如何修复?谢谢Meteor 用户配置文件值作为集合查找查询中的值,meteor,Meteor,此代码有一个集合菜单项,需要根据登录用户配置文件中的值进行筛选, db.users.find({});出局是 “配置文件”:{“菜单组”:“a”} 但我得到了一个错误: Meteor.userId只能在方法调用中调用。在发布函数中使用this.userId 从meteor服务器终端。问题行标记在下面代码的末尾。为什么会出现错误?如何修复?谢谢 ///////////////////////////////////// // client ///////////////////////
/////////////////////////////////////
// client
/////////////////////////////////////
<template name="mainMenu">
<div class="container">
<div class="row">
<section class="col-xs-12">
<div class="list-group menuItems">
{{#each menuItems}}
<li data-template="{{menuItem}}" role="presentation">
<a href="#" class="list-group-item menuItem">
<img src="/abc.png">
{{menuItem}} <span class="badge">></span>
</a>
</li>
{{/each}}
</div>
</section>
</div>
</div>
</template>
Template.mainMenu.onCreated(function () {
var template = this;
template.handler = template.subscribe('menuItems');
});
Template.mainMenu.helpers({
menuItems: function () {
return MenuItems.find();
}
});
Template.mainMenu.onDestroyed(function () {
var template = this;
if (template.handler && template.handler.stop) template.handler.stop();
});
/////////////////////////////////////
// server code
/////////////////////////////////////
var items =
[
{menuItem: "task1", group: "ab"},
{menuItem: "task2", group: "ab"},
{menuItem: "task3", group: "b"},
{menuItem: "task4", group: "a"},
{menuItem: "task5", group: "a"},
{menuItem: "task6", group: "a"},
{menuItem: "task7", group: "b"},
{menuItem: "task8", group: "b"},
{menuItem: "task9", group: "b"},
{menuItem: "login", group: "ab"},
{menuItem: "logout", group: "ab"}
]
if (!MenuItems.find().count()) {
_.each(items, function (doc) {
MenuItems.insert(doc);
})
}
Meteor.publish('menuItems', function(){
var menuGroup = Meteor.user().profile.menuGroup; //<<<<< problem line
return MenuItems.find({group: menuGroup});
});
/////////////////////////////////////
//客户
/////////////////////////////////////
{{{#每个菜单项}
{{/每个}}
Template.main menu.onCreated(函数(){
var模板=这个;
template.handler=template.subscribe('menuItems');
});
Template.mainMenu.helpers({
menuItems:函数(){
返回MenuItems.find();
}
});
Template.mainMenu.onDestroyed(函数(){
var模板=这个;
if(template.handler&&template.handler.stop)template.handler.stop();
});
/////////////////////////////////////
//服务器代码
/////////////////////////////////////
var项目=
[
{menuItem:“task1”,group:“ab”},
{menuItem:“task2”,group:“ab”},
{menuItem:“任务3”,组:“b”},
{menuItem:“task4”,group:“a”},
{menuItem:“task5”,group:“a”},
{menuItem:“task6”,group:“a”},
{menuItem:“任务7”,组:“b”},
{menuItem:“任务8”,组:“b”},
{menuItem:“任务9”,组:“b”},
{menuItem:“登录”,组:“ab”},
{menuItem:“注销”,组:“ab”}
]
如果(!MenuItems.find().count()){
_.每个(项目、功能(文档){
菜单项插入(单据);
})
}
Meteor.publish('menuItems',function()){
var menuGroup=Meteor.user().profile.menuGroup;//我认为您需要替换
Meteor.user()
有点像
Meteor.users.findOne({_id: this.userId})
内部发布
……试试
Meteor.publish('menuItems', function(){
if (!this.userId) return null;
var menuGroup = Meteor.users.findOne({_id:this.userId}).profile.menuGroup;
return MenuItems.find({group: menuGroup});
});
我得到错误:TypeError:无法读取未定义的属性“profile”。我已在检查中添加该属性,以确保有人已登录