使用 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")应该会给你一个正确的答案。

现在想想……为什么还要用qsnew 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"}

希望对您有所帮助!