首页 > 解决方案 > 让发布返回修改/“假”/非数据库数据,客户端仍然可以查询

问题描述

标准出版物看起来像这样:

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}]

基本上,如上所述,我希望在发送到客户端之前对数据库数据进行一些或完全修改,但是客户端应该能够像直接来自数据库一样查询它。

我该怎么做呢?

标签: databasemeteorsubscriptionmeteor-publications

解决方案


我相信给出的答案

Meteor:如何发布自定义 JSON 数据?

我有类似的需求,这个答案帮助了我。您应该直接操作属性“add”、“changed”、“ready()”等。

甚至评估使用“Meteor.call()”是否会更好


推荐阅读