2016-11-12 7 views
2
import {favRestaurants} from '/lib/collections'; 
import {Meteor} from 'meteor/meteor'; 
import {check} from 'meteor/check'; 

export default function() { 
    Meteor.methods({ 
    'favRestaurants.create' (id, name, rating, priceLevel, type) { 
     check(id, String); 
     check(name, String); 
     check(rating, Number); 
     check(priceLevel, Number); 
     check(type, String); 
     const createdAt = new Date(); 
     const restaurant = {id, name, rating, priceLevel, type, createdAt}; 
     if(check(Meteor.user()) == null){ 
     console.log('onlye logged in users can data'); 
     }else{ 
     FavRestaurants.insert(restaurant); 
     } 
    } 
    }); 
} 

これは、レストランコレクションにデータを追加するための私の挿入メソッドです。コンソールに「check(Meteor.user())」とログを記録すると、出力としてnullが返されます。このロジックによって、コレクションにデータを追加することはできませんが、これは可能です。ログインしたユーザーの個人的なコレクションを作成する

また、FavResaurantsコレクションを各ユーザーに個人用にしたいと考えています。 Iv'eは、ユーザーがいるかどうかを確認してから、クライアント側のmain.jsファイルにコレクションを追加しようとしました。

Meteor.loggingIn(() => { 
    console.log('check for user method'); 
    var restId = 0; 
    if(Meteor.user() != null){ 
    console.log('created new collection for the user'); 
    const FavRestaurants = new Mongo.Collection('favRestaurants' + restId); 
    } 
    restId++; 
}); 

私は私が流星docsで見つかったこの方法を使用してコンソールに任意の出力を取得いけません。コードは間違った場所にありますか?どんな助けでも大いに訴えられます。

docsによると、Accounts.ui.configは私が使用すべき方法です。しかし、私はコードでそれを置くべきではないか分かりません。今のところこのメソッドを配置すると、アプリケーションがクラッシュすることになります。

+0

コレクションはクライアント側とサーバー側の両方で定義する必要があります。ただし、クライアント上でのみ定義され、サーバーに戻されることはありません。 –

+0

コレクションはクライアントとサーバーの両方で定義されています –

答えて

1

あなたのようなものを使用する必要があり、メソッドにアクセスするためにのみログインしているクライアントを許可するように、あなたの最初の質問に答える:今すぐ

if (!Meteor.userId()) { 
    throw new Meteor.Error('403', 'Forbidden'); 
} 

を、私はあなたがコレクションが好きな保存したい見ますクライアント側の各ユーザ用のレストラン。しかし、私が見ているように、クライアントごとに1つしかログインしていないので、ユーザーごとに別々のコレクションを必要としません(コレクションは各クライアントにあります)。idを持つユーザーを参照するだけで、 docsを提案するようMeteor.loggingInは、一部のユーザーがログイン中であるかどうかを伝える方法であり、

FavRestaurants.find({user: Meteor.userId()}); 

また何をやっているが終わり:、その後のようなクエリにより、ユーザーの好みのレストランを取得。それを意味するわけではありません。

if (Meteor.loggingIn()) { 
    // Do your stuff 
} 

が、それはあなたに多くの明快さを与えるホープ:

あなたのような何かをする必要があります。

0

ユーザーあたりのコレクションを作成するのは悪い方法です。 あなたのfavRestaurantsコレクションを一度定義し、挿入前にレストラン文書にオーナーフィールドを追加します。 公開側のメソッドを作成して、ユーザー側のfavrestaurantのみをクライアント側に公開します。

さらにもう1つ、あなたのMeteorメソッドであなたのユーザーIDを確認してください。不必要な処理を避けることができます。

Reg群

関連する問題