来自https://www.meteor.com/tutorials/react/security-with-methods
的示例Meteor.methods({
'tasks.insert'(text) {
check(text, String);
// Make sure the user is logged in before inserting a task
if (! this.userId) {
throw new Meteor.Error('not-authorized');
}
}
看起来它所采用的唯一参数是JS中内置的Object
类型。但是,令人困惑的部分是它使用字符串来定义该对象中函数的名称。
为什么我不能
tasksInsert(text) {
// ...
}
答案 0 :(得分:2)
使用字符串来定义类或JS对象范围内的方法名称是可以接受的。
j@j-desktop:~$ node
> function 'add'(x, y) {
function 'add'(x, y) {
^^^^^
SyntaxError: Unexpected string
> 'add'(x, y) {
... function 'add'(x, y) {
^^^^^
SyntaxError: Unexpected string
> 'add'(x, y) {
... return x + y;
... }
...
... ;
...
> class A {
... 'add'(x, y) {
..... return x + y;
..... }
...
... }
undefined
> let a = new A();
undefined
> a.add(1, 1);
2
> let obj = {
... 'addTwo'(x) {
..... return x + 2;
..... }
... }
undefined
> obj.addTwo(4);
6
答案 1 :(得分:0)
Metor.methods()
定义Meteor应用程序的服务器端方法。
这不是一个简单的函数调用。通过它,您将定义客户端将调用哪些函数。
这是一种模板交互数据库,检查,验证和更改的方法。
如果您之前将此Meteor.call('stringName_ofFunction', {params}, (err, result)=>{CallBack});
定义为'stringName_ofFunction'
内的函数,则只能致电:Meteor.methods();
。
问题是,随着您的应用程序变得越来越大,您可以为您的serverSide方法定义不同的文件,这样您就可以更有条理。你将使用Meteor.Methods();告诉Meteor,该方法中的那些函数是客户端Meteor.call()调用的服务器端函数。