Javascript 为什么审核参数检查会在所有参数都已检查时引发异常?
给定以下方法定义Javascript 为什么审核参数检查会在所有参数都已检查时引发异常?,javascript,meteor,Javascript,Meteor,给定以下方法定义 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 发生了什么?审核参数检查并不能确保您
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
发生了什么?
审核参数检查
并不能确保您已检查了所有已定义的参数,而是确保您已检查了所有已传递的参数。1
考虑以下示例:
Meteor.methods({
whale : function(foo) {
return 'Hello ground!'
}
})
如果从客户端调用此方法,则服务器上会发生以下情况:
Meteor.call('whale') //Nothing happens
Meteor.call('whale', 'foo') //Exception
不传递任何参数意味着,如果未写入检查
,则不会出现审核参数检查
的异常
然而,这也意味着传递太多的参数会使方法抛出
Meteor.methods({
ground : function(whale) {
check(whale, Patterns.cetacea)
answerTo(whale)
}
})
如果你对此有异议,这意味着你做错了事情:客户在传递你不知道的论点。如果它发生在开发过程中,这意味着您不知道哪些参数正在传递给您的方法,这可能是一个问题
安装的软件包使用的方法的参数可能比预期的多。请参阅他们各自的文档,以确切了解传递了哪些参数(或者只需编写console.log(arguments)
),以便确保编写正确的安全代码。2
1:见
2:或者只写脏的不安全代码-
检查(参数,[Match.any])
根据
Meteor.call('ground', MobyDick) //All is fine
Meteor.call('ground', MobyDick, true) //Exception