使用express-validator
版5.3.0
。
我喜欢新语法,并且想验证查询参数是否有效。该参数可以是一个数组(如 repeat 参数中一样)。
我遇到的问题是,当仅传递1个元素时,框架似乎只将其视为字符串,并且错误消息有点麻烦。
具有以下配置:
checkSchema([
{
foo: {
in: 'query',
isAlphanumeric: true,
optional: true,
errorMessage: 'Invalid foo'
}
}])
使用网址http://server/api?foo=bar&foo=not bar
时出现以下错误:
{
"location": "query",
"param": "foo[1]",
"value": "not bar",
"msg": "Invalid foo"
}
这似乎是正确的。
但是使用网址http://server/api?foo=not bar
时出现以下错误:
{
"location": "query",
"param": "foo[3]",
"value": " ",
"msg": "Invalid foo"
}
这没什么大不了的,但是foo[3]
param
有点误导,因为从技术上讲,它们只是foo
或foo[0]
。
我尝试过使用isArray: true
,如下所示,但是没有运气:
foo: {
in: 'query',
isArray: true,
isAlphanumeric: true,
optional: true,
errorMessage: 'Invalid foo',
},
但是,这似乎实际上忽略了第二个foo
参数(因为从技术上讲,字符串是字符数组?)。
并使用单一参数版本foo=no bar
,它会两次显示错误消息(我想是因为isArray
和isAlphanumeric
的验证器都失败了?)
答案 0 :(得分:0)
好的,看起来express-validator
从那时起就更新了,现在提供了toArray
消毒剂。
现在,我可以编写以下代码:
checkSchema([
{
foo: {
in: 'query',
optional: true,
toArray: true,
},
'foo.*': {
in: 'query',
isAlphanumeric: true,
optional: true,
errorMessage: 'Invalid foo'
}
}])
作为一项额外的奖励,它现在将总是将具有1个参数的查询转换为1个值的数组。