未使用 qs npm 包解析第一个查询字符串参数

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

为什么?

Ama*_*dan 8

qs解析查询字符串。它不解析 URL。首先使用 URL 解析器 ( new URL(addr).search.substring(1)) 从 URL 获取查询字符串。

qs.parse("title=querystring&action=edit") 应该给你一个正确的答案。

现在我想想……为什么还要使用qsnew URL(addr).searchParams应该已经给你解析的参数......


Ngu*_*You 5

答案是:该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)

希望,这有帮助!