在流星中向用户集合添加字段的正确方式

Proper way to add field to the user collection in meteor

本文关键字:字段 方式 添加 集合 流星 用户      更新时间:2023-09-26

因此,我正在尝试向用户集合添加一个"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()));

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

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

首先,服务器代码:

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

客户:

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

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

您应该使用函数的回调来获得结果:

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