当meteor应用程序正在运行时,在服务器端执行任意代码的方法有哪些?
有时我发现自己希望在应用程序运行时在服务器上执行一些特权代码。 例如,我可能想要快速删除集合中的文档(当客户端被阻止时)。 或者,我可能想要快速尝试一下像Email.send
和Accounts.createUser
这样的服务器端函数。
那么实现这个的一些方法是什么? 我关心的是如何运行meteor应用程序的两种情况:
- 使用
meteor
命令运行 - 作为绑定的节点应用程序运行
最后,我还想设置可以在Meteor上下文中执行一些代码的cron作业。 这是可以通过解决方法直接实现或可行的吗?
谢谢您的帮助!
难道你不能只写服务器端的方法,只适用于你的用户? 然后用Meteor.methods
公开这些Meteor.methods
并在客户端控制台中运行它们。 这就是我想要testing的时候做的事情。 Email.send
。 你也可以更进一步,写一个基本的pipe理界面。
例如,在服务器上:
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"});
要在应用程序运行时与数据库进行交互,可以在应用程序的根目录下执行meteor mongo
。 这将启动一个mongo shell,但是你不能在其中testing服务器端的function。 到现在为止,我不认为有一种方法可以在一个(没有捆绑的)meteor应用程序中真正运行服务器端控制台,但是也许你可以用meteor bundle
你的应用程序,运行它,然后find一个开始的方法一个服务器端控制台。
您可以通过使用curl模拟浏览器来调用meteor服务器端代码。 如果每次启动meteor,都必须将代码放入Meteor.startup()函数中。 如果你模拟一个浏览器,你可以让meteor服务器运行,然后根据表单或查询string指定任意函数来执行。
你也可以做Meteor.methods({eval: function(code){eval(code);}})
,它允许你input你想要的任何代码并运行它在服务器端。 这不是世界上最安全的事情,但它对我有效。 我的猜测是,通过确保方法中的this.userId用户是pipe理员,可以使其不太安全。 这里有一个testing回购,随时克隆和分叉:
https://github.com/belisarius222/meteor-eval-test
免责声明:这是允许任何人在服务器上运行任意代码的代码。 这是一个概念的certificate,并不打算是安全的。