有时我发现自己想在应用程序运行时在服务器上执行一些特权代码。例如,我可能想快速删除集合中的文档(当客户端被阻止这样做时)。或者,我可能想快速尝试服务器端功能,例如Email.send
和Accounts.createUser
。
那么有哪些方法可以实现呢?我关心流星应用程序如何运行的两种情况:
- 使用
meteor
命令运行 - 作为捆绑的节点应用程序运行
最后,我还想设置可以在 Meteor 上下文中执行一些代码的 cron 作业。这是否可以通过变通办法直接实现或可行?
谢谢您的帮助!
有时我发现自己想在应用程序运行时在服务器上执行一些特权代码。例如,我可能想快速删除集合中的文档(当客户端被阻止这样做时)。或者,我可能想快速尝试服务器端功能,例如Email.send
和Accounts.createUser
。
那么有哪些方法可以实现呢?我关心流星应用程序如何运行的两种情况:
meteor
命令运行最后,我还想设置可以在 Meteor 上下文中执行一些代码的 cron 作业。这是否可以通过变通办法直接实现或可行?
谢谢您的帮助!
难道你不能只写只对你的用户有用的服务器端方法吗?然后公开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"});
您可以通过使用 curl 模拟浏览器来调用流星服务器端代码。如果每次都启动流星,则必须将代码放入 Meteor.startup() 函数中。如果您模拟浏览器,您可以让流星服务器运行,然后根据表单或查询字符串指定要执行的任意函数。
要在应用程序运行时与数据库交互,您可以meteor mongo
在应用程序的根目录中进行。这将启动一个 mongo shell,但您不能在其中测试服务器端功能。到目前为止,我认为没有办法在(未捆绑的)meteor 应用程序中实际运行服务器端控制台,但也许您可以meteor bundle
使用您的应用程序,使用节点运行它,然后找到启动服务器的方法侧控制台。
你也可以这样做Meteor.methods({eval: function(code){eval(code);}})
,它允许你输入你想要的任何代码并在服务器端运行它。这不是世界上最安全的事情,但它对我有用。我的猜测是,通过确保方法中带有 this.userId 的用户是管理员,可以降低它的不安全性。这是一个用于测试的存储库,请随意克隆和分叉:
https://github.com/belisarius222/meteor-eval-test
免责声明:这是允许任何人在服务器上运行任意代码的代码。这是一个概念证明,并不是为了保证安全。