1

そのため、「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()));

ユーザーモデルに追加する適切な方法は何ですか?

4

2 に答える 2

5

アカウントの種類をクライアントに表示したい場合は、必要なフィールドでパブリッシュ/サブスクライブ チャネルを作成する必要があります。Meteor は のみを公開しusername、デフォルトでは. db からフィールドを取得するメソッドを呼び出すことは、99% のケースで悪い考えです。emailprofile

まず、サーバー コード:

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

クライアント:

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

これを実行したら、次に、クライアントが他のユーザーに関する機密情報を取得しないようにします。

于 2013-08-21T22:03:28.270 に答える
-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

于 2013-08-21T21:29:07.287 に答える