【问题标题】:Proper way to add field to the user collection in meteor在流星中向用户集合添加字段的正确方法
【发布时间】:2013-08-24 10:16:32
【问题描述】:

所以我正在尝试将“account_type”字段添加到用户集合中。

Meteor.startup(function () {
    if (Meteor.users.find().count() === 0){
        var user = Accounts.createUser({
            email: 'email@fake.com',
            password: 'password'
        });
        Meteor.users.update({_id: user}, {$set : {account_type: 'admin'}});
    }
});

当我调用Meteor.user().account_type 时,它是未定义的。

我还在某处读到过类似的东西可能是必要的:

Meteor.methods({
    get_user: function(user_id){
        return Meteor.users().find({ _id: user_id}, {fields: {account_type: 1}});
    }
});

但是当我调用它时我再次变得不确定:

console.log(Meteor.call('get_user', Meteor.userId()));

添加到用户模型的正确方法是什么?

【问题讨论】:

  • 提示:不用find({_id: uid})写成简写形式find(uid)就够了,它们是等价的。

标签: javascript mongodb meteor


【解决方案1】:

你应该使用函数的回调来获取结果:

Meteor.call('get_user', Meteor.userId(), function(error, result){
    // do something with result
    console.log(error, result);
});

另一方面,尝试:

Meteor.startup(function () {
    if (Meteor.users.find().count() === 0){
        var user = Accounts.createUser({
            email: 'email@fake.com',
            password: 'password'
        });
        Meteor.users.update({_id: user._id}, {$set : {account_type: 'admin'}});
    }
});

注意我添加了user._id

【讨论】:

  • 这是错误的:Accounts.createUser 返回创建用户的_id,而不是整个对象。
【解决方案2】:

如果您想在客户端上显示帐户类型,您需要创建带有所需字段的发布/订阅通道。 Meteor 默认只发布usernameemailprofile。在 99% 的情况下,调用方法从 db 中获取字段是一个坏主意。

首先,服务器代码:

Meteor.publish('users', function() {
    return Meteor.users.find({}, {fields: {accountType: 1}});
});

客户:

Deps.autorun(function() {
    Meteor.subscribe('users');
});

当您运行此程序时,接下来请确保客户端不会获取有关其他用户的敏感信息。

【讨论】:

  • 这似乎仍然无法正常工作。我尝试记录Meteor.users.update({_id: user}, {$set : {account_type: 'admin'}});,它说未定义。这可能是失败的原因吗?
猜你喜欢
  • 2014-11-17
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 2014-06-20
  • 2017-06-02
相关资源
最近更新 更多