4

有时我发现自己想在应用程序运行时在服务器上执行一些特权代码。例如,我可能想快速删除集合中的文档(当客户端被阻止这样做时)。或者,我可能想快速尝试服务器端功能,例如Email.sendAccounts.createUser

那么有哪些方法可以实现呢?我关心流星应用程序如何运行的两种情况:

  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

您可以通过使用 curl 模拟浏览器来调用流星服务器端代码。如果每次都启动流星,则必须将代码放入 Meteor.startup() 函数中。如果您模拟浏览器,您可以让流星服务器运行,然后根据表单或查询字符串指定要执行的任意函数。

于 2012-12-21T09:02:45.970 回答
1

要在应用程序运行时与数据库交互,您可以meteor mongo在应用程序的根目录中进行。这将启动一个 mongo shell,但您不能在其中测试服务器端功能。到目前为止,我认为没有办法在(未捆绑的)meteor 应用程序中实际运行服务器端控制台,但也许您可以meteor bundle使用您的应用程序,使用节点运行它,然后找到启动服务器的方法侧控制台。

于 2012-12-20T16:00:49.733 回答
0

你也可以这样做Meteor.methods({eval: function(code){eval(code);}}),它允许你输入你想要的任何代码并在服务器端运行它。这不是世界上最安全的事情,但它对我有用。我的猜测是,通过确保方法中带有 this.userId 的用户是管理员,可以降低它的不安全性。这是一个用于测试的存储库,请随意克隆和分叉:

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

免责声明:这是允许任何人在服务器上运行任意代码的代码。这是一个概念证明,并不是为了保证安全。

于 2012-12-23T22:03:19.620 回答