gpt4 book ai didi

javascript - 当所有参数似乎都已检查时,为什么 audit-argument-checks 会引发异常?

转载 作者:行者123 更新时间:2023-11-30 16:34:56 26 4
gpt4 key购买 nike

给定以下方法定义,

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

发生了什么事?

最佳答案

audit-argument-checks 不能确保您检查您定义的所有参数,它确保您检查 code>ed 传递的所有参数。1

考虑以下示例:

Meteor.methods({
whale : function(foo) {
return 'Hello ground!'
}
})

如果我们从客户端调用此方法,服务器上会发生以下情况:

Meteor.call('whale') //Nothing happens
Meteor.call('whale', 'foo') //Exception

不传递任何参数意味着如果没有编写check,则不会出现audit-argument-checks 异常。


但是,这也意味着传递太多参数会使您的方法抛出异常。

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 :或者只是编写肮脏的不安全代码 - check(arguments, [Match.any]) 根据 the docs

关于javascript - 当所有参数似乎都已检查时,为什么 audit-argument-checks 会引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com