给出以下方法定义,
Meteor.methods({
myMethod : function(foo) {
//Checking the only argument
check(foo, String)
return true
}
})
该方法非常简单,但有时会失败:
Meteor.call('myMethod', 'foo', 'bar') //Exception : did not check all arguments
发生了什么事?
答案 0 :(得分:3)
audit-argument-checks
无法确保您check
编辑了您已定义的所有参数,它确保您check
编辑所有已传递的参数。< /强> 1
请考虑以下示例:
Meteor.methods({
whale : function(foo) {
return 'Hello ground!'
}
})
如果从客户端调用此方法,则服务器上会发生以下情况:
Meteor.call('whale') //Nothing happens
Meteor.call('whale', 'foo') //Exception
不传递任何参数意味着如果没有写audit-argument-checks
,则不会出现check
的例外情况。
但是,这也意味着传递太多参数会使你的方法抛出。
Meteor.methods({
ground : function(whale) {
check(whale, Patterns.cetacea)
answerTo(whale)
}
})
Meteor.call('ground', MobyDick) //All is fine
Meteor.call('ground', MobyDick, true) //Exception
如果您遇到此问题,则意味着您的错误:客户端正在传递您不知道的参数。如果它在开发期间发生,则意味着您不知道哪些参数正在传递给您的方法,这可能是一个问题。
安装的软件包也可能使用参数多于预期的方法。请参阅各自的文档,以确切了解传递的参数(或只写console.log(arguments)
),以便确保编写正确的安全代码。 2
1 :见https://github.com/meteor/meteor/blob/devel/packages/ddp-server/livedata_server.js#L1686
2 :或者根据the docs编写脏的不安全代码 - check(arguments, [Match.any])