使用 qs npm 包不解析第一个查询字符串参数
First query string parameter is not parsed using qs npm package
我无法使用 qs
npm 包解析第一个查询字符串参数。我做错了什么?
我在我的控制台中执行这些命令
import * as qs from './qs'
var addr = "https://www.somesite.se/?title=querystring&action=edit"
var parsed = qs.parse(addr)
执行这些命令后 parsed
的值为:
{ 'https://www.somesite.se/?title': 'querystring',
action: 'edit' }
这很奇怪。为什么 title
不是返回对象上的 属性?我希望 parsed.title
的值为 'querystring'
。但事实并非如此。 parsed.title
的值为 undefined
.
为什么?
qs
解析查询字符串。它不解析 URLs。首先使用 URL 解析器 (new URL(addr).search.substring(1)
) 从 URL 获取查询字符串。
qs.parse("title=querystring&action=edit")
应该会给你一个正确的答案。
现在想想……为什么还要用qs
? new URL(addr).searchParams
应该已经给你解析的参数了...
答案是:qs
库仅用于解析查询字符串。
根据Wikipedia:
a query string is the part of a uniform resource locator (URL) which assigns values to specified parameters.
例如:
在您的情况下,正确的代码应该是:
var addr = 'title=querystring&action=edit';
var parsed = qs.parse(addr);
console.log(parsed); // {title: "querystring", action: "edit"}
要绕过前导问号,请使用 ignoreQueryPrefix:
var addr2 = '?title=querystring&action=edit';
var parsed2 = qs.parse(addr2, { ignoreQueryPrefix: true });
console.log(parsed2); // {title: "querystring", action: "edit"}
希望对您有所帮助!
我无法使用 qs
npm 包解析第一个查询字符串参数。我做错了什么?
我在我的控制台中执行这些命令
import * as qs from './qs'
var addr = "https://www.somesite.se/?title=querystring&action=edit"
var parsed = qs.parse(addr)
执行这些命令后 parsed
的值为:
{ 'https://www.somesite.se/?title': 'querystring',
action: 'edit' }
这很奇怪。为什么 title
不是返回对象上的 属性?我希望 parsed.title
的值为 'querystring'
。但事实并非如此。 parsed.title
的值为 undefined
.
为什么?
qs
解析查询字符串。它不解析 URLs。首先使用 URL 解析器 (new URL(addr).search.substring(1)
) 从 URL 获取查询字符串。
qs.parse("title=querystring&action=edit")
应该会给你一个正确的答案。
现在想想……为什么还要用qs
? new URL(addr).searchParams
应该已经给你解析的参数了...
答案是:qs
库仅用于解析查询字符串。
根据Wikipedia:
a query string is the part of a uniform resource locator (URL) which assigns values to specified parameters.
例如:
在您的情况下,正确的代码应该是:
var addr = 'title=querystring&action=edit';
var parsed = qs.parse(addr);
console.log(parsed); // {title: "querystring", action: "edit"}
要绕过前导问号,请使用 ignoreQueryPrefix:
var addr2 = '?title=querystring&action=edit';
var parsed2 = qs.parse(addr2, { ignoreQueryPrefix: true });
console.log(parsed2); // {title: "querystring", action: "edit"}
希望对您有所帮助!