我一直在尝试使用Node.js的查询解析器,我能够让它将一些非常复杂的查询解析成非常深层嵌套的对象和数组。一些例子:
查询字符串:
1) '?$or=foo&$or=bar'
2) '?$or[foo]=bar'
3) '?$or[0][foo]=bar&or[1][bar]=baz'
4)'?$or[0][foo]=bar&or[1][bar][]=baz&or[1][bar][]=bing&or[1][bar][]=bang'
节点将它们解析为:
1) {
$or: ['foo', 'bar']
}
2) {
$or: {
foo: 'bar'
}
}
3) {
$or: [
{ foo: 'bar' },
{ bar: 'baz' }
]
}
4) {
$or: [
{ foo: 'bar' },
{ bar: ['baz', 'bing', 'bang'] }
]
}
这很酷,但我无法找到有关其原因的文档。我已经看到了this document的几个链接,它有这样的说法:
由Internet协议字面地址(版本6 [RFC3513]或更高版本)标识的主机通过将IP文字括在方括号内来区分(" ["和"]&#34 )。这是URI语法中唯一允许使用方括号字符的地方。
听起来我至少在Node之外使用这种语法是不安全的,但是为什么Node决定它应该以这种方式工作,并且他们是否在任何地方记录了这个?
答案 0 :(得分:0)
经过一些挖掘后,我在express.js 4.x docs中发现,表达的查询解析器基于qs parser。我正在运行express 3.x,其文档似乎没有提及qs或任何高级解析功能,但所有qs文档似乎仍然适用。