0

私はこのコードを持っています

$scope.users = $meteor.collection( function() {
        return AllClients.find({}, {name: 1, _id: 0});
      });

このような値を返すことを期待しています

/* 1 */
{
    "name" : "Samsung"
}

/* 2 */
{
    "name" : "HP"
}

しかし、それでもこのような値を返します

/* 1 */
{
    "_id" : "SqFP23zTXo6MqDLxP",
    "code" : "A100",
    "name" : "Samsung",
    "address" : "Korea"
}

/* 2 */
{
    "_id" : "8QtNBoBGrvv5wWpuZ",
    "code" : "B100",
    "name" : "HP",
    "address" : "USA"
}

これはバグですか?それとも悪いコーディング...

4

1 に答える 1

0

まず、クライアント側で他の情報を利用したくない場合は、サーバー側で作業を行う必要があります。これは、発行メソッドを使用して処理されます。

まず、自動公開を削除します。

> meteor remove autopublish

次に、サーバー フォルダーに publish メソッドを作成できます。

Meteor.publish('clientNames', function() {
    return AllCients.find({}, {fields: {name: 1} });
});

この公開メソッドは、すべてのクライアントを検索し、name フィールドのみを許可します。_id フィールドを引き続き取得する可能性があることに注意してください。これは常に送信されると思います。

次に、クライアント側でサブスクライブする必要があります。

$scope.$meteorSubscribe('clientNames').then(function() {
    $scope.users = $scope.$meteorCollection(AllClients, false);
});

meteor では、クライアント側から情報にアクセスすると、サーバーが許可したものにしかアクセスできません。この場合、AllCientsサーバーが許可していないため、要求してもすべての情報を取得できない可能性があります。

于 2015-10-23T17:15:49.690 に答える