标准出版物看起来像这样:
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}]
基本上,如上所述,我希望在发送到客户端之前对数据库数据进行一些或完全修改,但是客户端应该能够像直接来自数据库一样查询它。
我该怎么做呢?