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

然后你可以在你的服务器文件夹中创建发布方法:

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

这个发布方法会找到所有的客户端并且只允许 name 字段,记住你可能仍然会得到 _id 字段,我相信它总是被发送的。

然后在您的客户端,您需要订阅它:

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

使用流星,当您从客户端访问信息时,您只能访问服务器允许您访问的内容。在这种情况下,您可以请求AllCients但不拥有所有信息,因为服务器不允许。

于 2015-10-23T17:15:49.690 回答