2017-12-09 5 views
0

{key:value}オブジェクトを渡して流星に送信しようとしていますので、データベースに問い合わせることができます。私が購読するには、以下の使用するクライアントで文字列パラメータを使用したMeteor Publish/Subscribeパッシングオブジェクトの問題

Meteor.publish('product', (query) =>{ 
    return Clothings.find(query); 
    }) 

:以下の流星で

products : { 
    categs:['Ladies Top','Gents'], 
    name : Apple 
} 

私が持っている公開:

マイモンゴDBデータベースは製品に(のみ関連件のデータを)持っている

let query = {categs:'/ladies top/i'}; // please notice the case is lower 
    let subscribe = Meteor.subscribe('product',query); 
    if (subscribe.ready()){ 
    clothings = Products.find(query).fetch().reverse(); 
    let count = Products.find(query).fetch().reverse().length; // just for test 
    } 

問題は、クライアントからサーバーにクエリを送信すると、自動的にエンコードされます例: {categs:'/ladies%top/i'}

このクエリは全く機能していないようです。合計20,000以上の製品があり、取り込みはすべてオプションではありません。だから私はカテゴリに基づいて取得しようとしている(約100製品ごとに)。

私はmeteorとmongo dbを使い慣れていて、既存のコードに従おうとしていましたが、これは正しいとは限りません。コードを改善して同じことを達成するより良い方法はありますか?

どのような提案や考えが高く評価されます。

私は流星の文書を通過しましたが、私のシナリオの例はないようですので、誰かが私に助けてくれることを願っています:)乾杯!

答えて

2

まず、正規表現をパラメータとして送信しようとしています。それがエンコードされている理由です。 Meteorは関数や正規表現をどのように引数に渡すかを知らない。この特定の出版物については

、私はあなたが検索したい文字列を介して送信すると、サーバー上で正規表現を構築するお勧めします。

クライアント:

let categorySearch = 'ladies top'; 
let obj = { categorySearch }; // and any other things you want to query on. 
Meteor.subscribe('productCategory',obj); 

がサーバ:

Meteor.publish('productCategory',function(obj){ 
    check(obj,Object); 
    let query = {}; 
    if (obj.categorySearch) query.category = { $regex: `/${obj.categorySearch}/i` }; 
    // add any other search parameters to the query object here 
    return Products.find(query); 
}); 

を第2に、クエリオブジェクト全体をパブリケーション(またはメソッド)に送信することは、攻撃者が任意のクエリを送信できるため、安全ではありません。おそらく、あなたのProductsコレクションでは問題ありません。

+0

返信ありがとうございます、これは私の問題を解決するのに役立ちます!乾杯 –

関連する問題