@bitovi/querystring-parser

中文文档
0.8.1发布于 2023/12/14MITCommonJS近 30 天下载 4821
中文使用文档
文档目录11 节
  1. 为什么是查询- parser?
  2. 安装
  3. 使用量
  4. 排序参数
  5. 倾角参数
  6. 包含参数
  7. 字段参数
  8. 过滤参数
  9. MongoDB- Style 过滤参数
  10. IBM- Style 过滤参数
  11. 发展/贡献

查询字符串- parser

Tests Workflow Status Join our Slack

为什么是查询- parser?

审议下列情况:

  • 你正在制作一个标准的 CRUD 应用程序, 更多或更少跟随 JSON:API规格
  • 此应用程序将接收 HTTP 以查询字符串获取请求, 如以下示例中 :
    • ?filter[start_date][$gt]=2020-01-01
    • ?sort=-date,name&page[number]=1&page[size]=5
    • ?fields[articles]=title,body&fields[people]=name
  • 您需要解析这些查询参数以获取请求的数据 。 此库为您进行查询字符串分析 .

安装

npm install @bitovi/querystring-parser

如果你打算用这个图书馆 反对 或者说 排序,不安装 @bitovi/querystring-parser。反之,安装:

使用量

const querystringParser = require("@bitovi/querystring-parser");

const { page } = querystringParser.parse("page[number]=1&page[size]=10");
console.log(page.number); // --> 1
console.log(page.size); // --> 10

排序参数

分析结果 sort 查询参数存储于 sort 属性. 其价值 sort 属性是一组“类型字段”对象。 每个"类型字段"对象都包含一个字段名称和排序方向.

参考: JSON:API - 排序

const { sort } = querystringParser.parse("sort=-date,name");
console.log(sort[0]); // --> { field: 'date', direction: 'DESC' }
console.log(sort[1]); // --> { field: 'name', direction: 'ASC' }

倾角参数

分析结果 page 查询参数存储于 page 属性。 其价值 page 属性是一个有 2 个密钥的对象 : number 财务报告和审定财务报表 size。 。 。 .

参考: JSON:API - 铺设

const { page } = querystringParser.parse("page[number]=1&page[size]=10");
console.log(page.number); // --> 1
console.log(page.size); // --> 10

包含参数

分析结果 include 查询参数存储于 include 属性。 其价值 include 属性是一组“关系路径”.

参考: JSON:API - 包含相关资源

const { include } = querystringParser.parse("include=children.movies.actors.children,children.movies.actors.pets,children.pets,pets");
console.log(include[0]); // --> 'children.movies.actors.children'
console.log(include[1]); // --> 'children.movies.actors.pets'
console.log(include[2]); // --> 'children.pets'
console.log(include[3]); // --> 'pets'

字段参数

分析结果 fields[TYPE] 查询参数存储于 fields 属性。 其价值 fields 属性是一个对象。 对于该对象中的每个密钥值对,密钥是类型的名称,而该值是该类型的一个字段数组.

参考: JSON:API - Sparse 场集

const { fields } = querystringParser.parse("fields[articles]=title,body&fields[people]=name");
console.log(fields.articles); // --> [ 'title', 'body' ]
console.log(fields.people); // --> [ 'name' ]

过滤参数

分析结果 filter 查询参数存储于 filter 属性。 有2个"风格"的查询字符串过滤器被支持. "MongoDB-Style"和"IBM-Style". 虽然它们有自己的惯例,但它们都产生同样的产出。 如果需要,可以使用这两种样式,但不能在同一个查询字符串中.


MongoDB- Style 过滤参数

蒙戈DB-Style的基地来自 MongoDB 比较查询操作员。 。 。 .

快速示例

查询过滤器解析输出
过滤器[名]=brad{ LIKE: [ '#name', '%brad%' ] }
过滤器[名称][$eq]=mike{ '=': [ '#name', 'mike' ] }
过滤器[年龄][$gt]=21{ '>': [ '#age', 21 ] }
过滤器 [生 [$lte] = 2020-01-01{ '<=': [ '#born', '2020-01-01' ] }
过滤器[分 [$eq]{ 'IS NULL': '#score' }
过滤器 [名称][美元] = michael, brad{ IN: [ '#name', 'michael', 'brad' ] }

MongoDB - 样式运算符

以下是MongoDB-Style运算符及其相容值类型的完整列表.

运算符字符串数字日期无效数组
(单位:美元)✅✅✅✅❌
(单位:美元)✅✅✅✅❌
单位 $gt✅✅✅❌❌
$gte (单位:千美元)✅✅✅❌❌
(单位:美元)✅✅✅❌❌
(单位)✅✅✅❌❌
喜欢✅❌❌❌❌
(单位:美元)✅✅✅✅✅
(单位:百万美元)✅✅✅✅✅

关闭运算符

MongoDB-Style过滤器不需要明确的运算符. 在许多情况下,数值类型足以让解析器推断出哪一个操作员可以使用. 下面的例子显示了每个值类型的操作员推论.

数值类型示例产出
字符串过滤器[名]=lisa{ LIKE: [ '#name', '%lisa%' ] }
编号过滤器[年龄]=25{ '=': [ '#age', 25 ] }
日期过滤器[生]=2020-01-01{ '=': [ '#born', '2020-01-01' ] }
无效过滤器[分数]%%%%%{ 'IS NULL': '#score' }
数组过滤器[名]=mike, brad{ IN: [ '#name', 'mike', 'brad' ] }

阵列

以下示例说明可如何指定数组值.

  • 使用重复查询参数 :
    • filter[age][$in]=24&filter[age][$in]=25&filter[age][$in]=26
  • 使用逗号( U),:
    • filter[age][$in]=24,25,26

两种样式将产生相同的输出: { IN: [ '#age', 24, 25, 26 ] }

化合物过滤器

MongoDB-Style过滤器不直接支持高阶操作员(AND 编号 : OR 编号 : NOT) (中文(简体) ). 然而,如果在查询字符串中存在多个过滤器,则它们将被合并在一起 AND 时尚.

// example of 2 filters getting "AND"-ed together into a compound filter
const { filter } = querystringParser.parse("filter[name]=mike&filter[age]=25");
expect(filter).toEqual({
  AND: [
    { LIKE: ["#name", "%mike%"] },
    { "=": ["#age", 25] }
  ]
});

IBM- Style 过滤参数

IBM-Style基于 jsonapi.net 过滤规格。 。 。 .

快速示例

查询过滤器解析输出
过滤器=容器( 名称, “ brad ”){ LIKE: [ '#name', '%brad%' ] }
filter=等分 (名称, “mike ”){ '=': [ '#name', 'mike' ] }
过滤器=大Than(年龄,'25'){ '>': [ '#age', 25 ] }
filter= less OrEqual(生,'2020-01-01') (中文(简体) ){ '<=': [ '#born', '2020-01-01' ] }
filter= any (名称, “ brad” , “mike” ){ IN: [ '#name', 'brad', 'mike' ] }
过滤器=等分( 分数, null){ 'IS NULL': '#score' }
filter=not(等值(年龄,'25')){ NOT: { "=": ["#age", 25] } }
filter=和(任何(年龄,'10','20'),等值(名称,'mike')){ AND: [{ IN: ["#age", 10, 20] }, { "=": ["#name", "mike"] }] }
filter=或(任何(年龄,'10','20'),等分(名称,'mike')){ OR: [{ IN: ["#age", 10, 20] }, { "=": ["#name", "mike"] }] }

IBM- Style 操作器

以下是IBM-Style操作器及其相容值类型的完整列表.

运算符字符串数字日期属性参考文件无效嵌入式运算符
等于✅✅✅✅✅❌
大调✅✅✅✅❌❌
大正数✅✅✅✅❌❌
小谭✅✅✅✅❌❌
小于正数✅✅✅✅❌❌
包含✅❌❌❌❌❌
启动时间✅❌❌❌❌❌
结束✅❌❌❌❌❌
任意✅✅✅❌✅❌
没有❌❌❌❌❌✅
财务报告和审定财务报表❌❌❌❌❌✅
或者说❌❌❌❌❌✅

属性参考

一些IBM-Style操作器可以直接比较出两个不同的属性(或"列"). 以下文为例, wins 财务报告和审定财务报表 losses 是属性引用(相对于常数,例如 'emily' 或者说 '22') (中文(简体) ).

通过常规,属性引用在解析输出中被前缀为"#",以区别于常数.

// example attribute references
const { filter } = querystringParser.parse("filter=greaterThan(wins,losses)");
expect(filter).toEqual({ ">": ["#wins", "#losses"] });

化合物过滤器

IBM-Style过滤器直接支持更高级的操作员(AND 编号 : OR 编号 : NOT) (中文(简体) ). 此外,如果查询字符串中存在多个过滤器,它们将合并在一起 OR 时尚.

// example of 2 filters getting "OR"-ed together into a compound filter
const { filter } = querystringParser.parse("filter=contains(name,'mike')&filter=equals(age,'25')");
expect(filter).toEqual({
  OR: [
    { LIKE: ["#name", "%mike%"] },
    { "=": ["#age", 25] }
  ]
});

发展/贡献

见 捐款额

版本与发布记录

@bitovi/querystring-parser 共发布 39 个版本,首次发布于 2022/05/14;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.8.1latest2023/12/142 年前
0.8.02023/12/082 年前
0.7.122023/12/052 年前
0.7.112023/12/052 年前
0.7.102023/12/052 年前
0.7.92023/12/052 年前

关于 @bitovi/querystring-parser 的常见问题

@bitovi/querystring-parser 是什么?

[[(]https://www.bitovi.com/community/slack?utm source=badge 页面存档备份,存于互联网档案馆

如何安装 @bitovi/querystring-parser?

在项目目录运行 npm install @bitovi/querystring-parser,或使用 pnpm add / yarn add / bun add。

@bitovi/querystring-parser 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bitovi__querystring-parser 是否存在。

@bitovi/querystring-parser 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@bitovi/querystring-parser 可以商用吗?

@bitovi/querystring-parser 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bitovi/querystring-parser 的下载量有多少?

根据 npm 官方下载统计,@bitovi/querystring-parser 在 2026/10/08 – 2026/11/06 这 30 天内被下载 4,821 次,日均约 161 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bitovi/querystring-parser 还在维护吗?

最新版本 0.8.1 发布于 2023/12/14(2 年前);至今共发布 39 个版本,其中过去 12 个月发布了 0 个;首次发布于 2022/05/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。