あなたの質問はMeteor.userId()を混乱させているようです およびMeteor.user() 。質問の本文は前者について質問しているようですが、件名は後者について質問しているようです。両方に対処しようと思います。
- サーバー上で、公開関数内で、
Meteor.userId()のいずれかを呼び出します またはMeteor.user()エラーが発生します 。代わりに、this.userIdを使用してください またはMeteor.users.findOne(this.userId)、 それぞれ。ただし、公開関数は、クライアントがサブスクライブするときにのみ呼び出されることに注意してください。ユーザーレコードが変更されたときにパブリケーションを変更する場合は、observe()を実行する必要があります。Meteor.users.find(this.userId)によって返されるカーソル レコードが変更されたときに適切なアクションを実行します。 -
サーバー上で、メソッド呼び出しの処理中に、
Meteor.userId()およびMeteor.user()呼び出し元のユーザーのIDとそのレコードにそれぞれ対応します。ただし、Meteor.user()の呼び出しには注意してください。 であるため、DBクエリが生成されます。基本的にMeteor.users.findOne(Meteor.userId())と同等です 。メソッド呼び出し内で直接、
this.userIdを使用することもできますMeteor.userId()の代わりに 、ただし、パフォーマンスに大きな違いが見られる可能性はほとんどありません。サーバーがメソッド呼び出しを受信すると、ユーザーのID(およびその他の情報)を使用してメソッドの実装を実行します 特定のスロット に保存されている 繊維に。 Meteor.userId()現在のファイバのスロットからIDを取得するだけです。それは速いはずです。一般に、
Meteor.userId()を使用するコードをリファクタリングする方が簡単です。this.userIdよりthis.userIdは使用できないため メソッド本体の外側(例:thisメソッド本体から呼び出す関数内に「userId」プロパティはありません)、this.userIdを使用することはできません クライアントで。 - クライアントでは、
Meteor.userId()およびMeteor.user()エラーとthis.userIdをスローしません 動作しないでしょう。Meteor.user()の呼び出し 基本的にMeteor.users.findOne(Meteor.userId())、ただし、これはミニモンゴDBクエリに対応しているため、パフォーマンスはおそらく問題になりません。ただし、セキュリティ上の理由から、Meteor.user()によって返されるオブジェクト 不完全である可能性があります(特にautopublishの場合) パッケージがインストールされていません。