【问题标题】:Custom fields and global subscriptions for Meteor user accountsMeteor 用户帐户的自定义字段和全局订阅
【发布时间】:2016-09-08 20:57:42
【问题描述】:

我是第一次向 Meteor 用户帐户添加自定义数据。我已经能够毫无困难地添加自定义字段,而且我知道它们在那里,因为我可以在蒙古语中看到它们。我通过全球订阅发布,那么我该如何从各个字段读取数据?似乎语法与使用发布/订阅方法时的语法有很大不同。

所以,我有这样的用户帐户(如蒙古语所示):

"_id": "#################",
  "profile": {
    "name": "Test User"
  },
  "customfields": {
    "customfield1": [
      "A","B","C"
    ]
  }
}

server/main.js我有以下内容

Meteor.publish(null, function() {
  return Meteor.users.find(this.userId, {fields:{customfields:1}});
});

这似乎发布得很好。但是我使用什么代码将光标呈现为数据?我一直在 client/main.js 中使用这样的代码变体,但没有成功:

var stuff = Meteor.users.find(this.userId).fetch();
console.log(stuff.customfield1);

任何帮助表示赞赏。

【问题讨论】:

  • 错字:您过滤的是{ fields: { customfield: 1 }},而不是{fields:{ customfields: 1 }}
  • 抱歉,是的,示例中有一个错字——但在我的实际工作代码中并没有,所以很遗憾,这不是罪魁祸首。

标签: mongodb meteor user-accounts


【解决方案1】:

MyCollection.find() 返回一个 cursorMyCollection.findOne() 返回一个 object,即单个 mongodb 文档。

发布必须返回一个游标游标数组。你的出版物很好。

您基本上是在尝试使用户对象的customfields 键在客户端上可见。 (profile 密钥由 Meteor 自动发布)。

在客户端,您正在执行的操作:

var stuff = Meteor.users.find(this.userId).fetch();

你可以简单地使用:

var stuff = Meteor.user();

var stuff = Meteor.users.findOne(Meteor.userId());

然后stuff.customfields 将包含您要查找的内容。

第二种形式对我来说太冗长了,除非您正在寻找与登录用户不同的用户。

注意:客户端上的this.userId不会是当前用户的userId,而是未定义。这只适用于服务器。这实际上可能是您的问题的根本原因。此外,您的出版物必须ready() 以便数据可用。例如,这不是在登录后立即成立的。

【讨论】:

  • 啊,完美。似乎我在此过程的早期编写了工作代码,但我不知道 ready() 问题。我会解决这个问题。非常感谢!
【解决方案2】:

由于 customfield1 嵌套在 customfields 中,您是否尝试过 stuff.customfields.customfield1?

【讨论】:

  • 是的,事实上我可以让控制台记录一个数组(而不是未定义或错误),但它是一个空的。
猜你喜欢
  • 1970-01-01
  • 2016-03-03
  • 2015-10-02
  • 2015-11-27
  • 1970-01-01
  • 2015-09-16
  • 2022-01-03
相关资源
最近更新 更多