我正在尝试处理url字符串
http://localhost:8000/lastnames/location/city/215722?filter=beginswith:p&paging=(offset:2,limit:2)
如何处理解析这些子对象? (offset:2,limit:2)
只是作为字符串解析出来。这些是URL规范中接受的分隔符,所以我认为url.parse
(在节点中)会处理这个问题。
答案 0 :(得分:1)
“URL规范”(实际上,"Uniform Resource Identifier (URI): Generic Syntax, RFC-3986"定义了query
组件的语法:
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
换句话说,sub-delims
(包括括号)和冒号实际上只是查询中的普通字符。
如果请求(通过将true
作为第二个参数传递),url.parse
也会使用子请求=
和&
将查询拆分为键值分配,根据application / x-www-form-urlencoded格式。其他子delim不参与查询字符串编码。
请注意,url.parse
不会解码pct编码的序列,例如%25
;为此,您需要decodeURIComponent
。只有在将组件完全分解为它们的部件之后,才应该这样做。
简而言之,如果你想将(offset:2,limit:2)
解析为其他结构化对象,你需要自己做,可能是通过使用正则表达式,或者 - 如果格式足够复杂 - 像这样的解析器生成器jison。无论如何,你应该将百分比解码步骤留到最后;否则,将无法正确解析百分比编码的子删除。