use*_*776 3 javascript query-string
我无法使用qsnpm 包解析第一个查询字符串参数。我究竟做错了什么?
我在控制台中执行这些命令
import * as qs from './qs'
var addr = "https://www.somesite.se/?title=querystring&action=edit"
var parsed = qs.parse(addr)
Run Code Online (Sandbox Code Playgroud)
执行这些命令后parsed具有以下值:
{ 'https://www.somesite.se/?title': 'querystring',
action: 'edit' }
Run Code Online (Sandbox Code Playgroud)
这很奇怪。为什么title不是返回对象的属性?我期望的值parsed.title是'querystring'。但事实并非如此。值parsed.titleIS undefined。
为什么?
qs解析查询字符串。它不解析 URL。首先使用 URL 解析器 ( new URL(addr).search.substring(1)) 从 URL 获取查询字符串。
qs.parse("title=querystring&action=edit") 应该给你一个正确的答案。
现在我想想……为什么还要使用qs?new URL(addr).searchParams应该已经给你解析的参数......
答案是:该qs库仅用于解析查询字符串。
根据维基百科:
查询字符串是统一资源定位器 (URL) 的一部分,它将值分配给指定的参数。
例如:
在您的情况下,正确的代码应该是:
var addr = 'title=querystring&action=edit';
var parsed = qs.parse(addr);
console.log(parsed); // {title: "querystring", action: "edit"}
Run Code Online (Sandbox Code Playgroud)
要绕过前导问号,请使用 ignoreQueryPrefix:
var addr2 = '?title=querystring&action=edit';
var parsed2 = qs.parse(addr2, { ignoreQueryPrefix: true });
console.log(parsed2); // {title: "querystring", action: "edit"}
Run Code Online (Sandbox Code Playgroud)
希望,这有帮助!