4

アプリの実行中にサーバー上で特権コードを実行したい場合があります。たとえば、コレクション内のドキュメントをすばやく削除したい場合があります(クライアント側が削除をブロックされている場合)。または、やのようなサーバー側の機能をすばやく試してみたいと思うかもしれませEmail.sendAccounts.createUser

では、これを達成する方法のいくつかは何ですか?私は、meteorアプリを実行する方法の両方のケースに関心があります。

  1. meteorコマンドを使用して実行
  2. バンドルされたノードアプリとして実行

最終的には、Meteorコンテキストでコードを実行できるcronジョブも設定したいと思います。これは、回避策を通じて直接達成可能ですか、それとも実行可能ですか?

助けてくれてありがとう!

4

4 に答える 4

7

ユーザーに対してのみ機能するサーバー側のメソッドを作成することはできませんか?次に、それらを公開Meteor.methodsし、クライアントコンソールで実行します。それは私が例えばテストしたいときに私がすることです。Email.send。さらに一歩進んで、基本的な管理UIを作成することもできます。

たとえば、サーバーでは次のようになります。

  Meteor.methods({
    test_sendEmail: function(options) {
      if (this.userId != adminUserId) return; // don't execute unless admin
      Email.send(options);
    }
  });

クライアントの場合:

  Meteor.call("test_sendEmail", {to: "foo@bar.com", subject: "Foo", text: "Bar"});
于 2012-12-22T00:42:45.687 に答える
1

アプリの実行中にデータベースを操作するには、meteor mongoアプリのルートディレクトリで操作できます。これによりmongoシェルが起動しますが、サーバー側の機能をテストすることはできません。今のところ、(バンドルされていない)流星アプリでサーバー側コンソールを実際に実行する方法はないと思いますがmeteor bundle、アプリをノードで実行してから、サーバーを起動する方法を見つけることができます。 -サイドコンソール。

于 2012-12-20T16:00:49.733 に答える
1

curlを使用してブラウザーをシミュレートすることにより、meteorサーバー側のコードを呼び出すことができます。毎回meteorを起動する場合は、コードをMeteor.startup()関数に入れる必要があります。ブラウザをシミュレートする場合は、meteorサーバーを実行したままにして、フォームまたはクエリ文字列に基づいて実行する任意の関数を指定できます。

于 2012-12-21T09:02:45.970 に答える
0

を実行することもMeteor.methods({eval: function(code){eval(code);}})できます。これにより、必要なコードを入力してサーバー側で実行できます。これは世界で最も安全なことではありませんが、私にとってはうまくいきました。私の推測では、メソッドにthis.userIdを持つユーザーが管理者であることを確認することで、安全性をいくらか低くす​​ることができます。テスト用のリポジトリは次のとおりです。クローンを作成してフォークしてください。

https://github.com/belisarius222/meteor-eval-test

免責事項:これは、誰でもサーバー上で任意のコードを実行できるようにするコードです。これは概念実証であり、安全を確保することを目的としたものではありません。

于 2012-12-23T22:03:19.620 に答える