【问题标题】:User profile value as a value in collection find query用户配置文件值作为集合查找查询中的值
【发布时间】:2016-02-25 09:00:59
【问题描述】:

此代码有一个集合 MenuItems 需要根据登录的用户配置文件中的值进行过滤, db.users.find({});输出是

"profile" : { "menuGroup" : "a" }

但我收到错误:

Meteor.userId 只能在方法调用中调用。在发布函数中使用 this.userId。

来自流星服务器终端。问题行标记在下面代码的末尾。为什么会出现错误以及如何修复?谢谢

/////////////////////////////////////
//       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">&#x3e;</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});
});

【问题讨论】:

    标签: meteor


    【解决方案1】:

    我认为你需要更换

    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:无法读取未定义的属性“配置文件”
    • 我已添加检查以确保有人登录
    猜你喜欢
    • 2016-07-02
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2018-03-28
    相关资源
    最近更新 更多