【发布时间】:2018-07-09 10:12:39
【问题描述】:
标准出版物看起来像这样:
Meteor.publish('suggestions', function(query){
return MyDB.find({param: query});
}
一旦订阅,结果就可以通过简单的MyDB.find(...);在客户端访问。
但是,我将如何实现
(a) 某种预处理,意味着我在服务器端向查询的文档添加或删除某些属性,然后客户端应该仍然可以查询?
(b) 返回虚假数据,即遵循数据库架构且仍可在客户端查询的数据,但实际上不存在于服务器端?
例子:
Meteor.publish('suggestions', function(query){
//Stuff in database: [{prop1: 'first'}, {prop1: '2nd'}]
if(query == 'something') { //Fake data
return [{prop1: 'hello', prop2: 42}];
} else {
result = MyDB.find().fetch();
result.forEach(function(element) {
element.prop2 = random_number;
}
return result;
}
}
因此,如果我随后在客户端订阅“建议”,我希望看到以下内容:
//Subscribed with query 'something':
var arr = MyDB.find().fetch();
//arr equals [{prop1: 'hello', prop2: 42}]
Subscribed with another query
var arr = MyDB.find().fetch();
//arr equals [{prop1: 'first', prop2: random_number}, {prop1: '2nd', prop2: random_number}]
基本上,如上所述,我希望在发送到客户端之前对数据库数据进行一些或完全修改,但是客户端应该能够像直接来自数据库一样查询它。
我该怎么做呢?
【问题讨论】:
-
以后在客户端更改文档是否有任何安全隐患?如果没有,我建议您在客户端而不是服务器上发布处理数据,以确保服务器集合的数据完整性。
-
是的 - 我要修改的数据是动态的,因为它取决于其他集合的状态,我不希望用户访问的集合。 (甚至不是因为用户会看到重要数据,而仅仅是因为我必须向用户发送太多数据)
标签: database meteor subscription meteor-publications